SOLVED: Bräuchte Hilfe bei einer kleinen Regular Expression…
flaimo 06.07.2007 - 19:38 688 3
flaimo
ILFTKYS
|
ich bin gerade dabei eine kleine extension für unser firmeninternes wiki (metawiki) zu schreiben wo gewisse strings nach dem posten automatisch verlinkt werden indem sie in eine vorlage gepackt werden. leider stehe ich mit regulären ausdrücken auf kriegsfuß darum bräuchte ich ein bißchen hilfe. soweit bin ich bis jetzt (auszug): $text = 'Dies ist ein Beispieltext mit den Referenzen ABC@1000.1000:abc und <b>DEF@2000.2000:def</b>. Die Referenz [[QWE@3030.3030:qwer]] und {{Referenz|POI@232.123:poi|diese andere Referenz}} sind bereits verlinkt. Auch [[technet:XYZ@666.666:xyz]] hat bereits einen Link';
echo '<hr><i>Originaltext:</i>' , $text , '<br />';
$text = preg_replace('(([A-Z]+@[0-9]+\.[0-9]+:[A-Za-z]{1}[A-Za-z0-9]+))', '{{Referenz|$1|$1}}', $text);
echo '<hr><i>Neuer Text:</i>' , $text , '<br />';
in dem text kommen fünf referenzen vor. allerdings sollen nur die ersten beiden mit "{{Referenz|" und ""}} ummantelt werden. die letzten drei sind bereits manuell mit dem wiki-syntax verlinkt worden. da soll die RegEx nicht greifen. im moment tut sie das aber an allen vier stellen. wie muss ich den ausdruck modifizieren, damit er die letzten drei auslässt?
Bearbeitet von flaimo am 06.07.2007, 23:20
|
that
Hoffnungsloser Optimist
|
So wie ich das auf den ersten Blick sehe, brauchst du vor und nach dem bisherigen RegEx sowas wie ein [^[{] und ein [^]}] (wie auch immer man das genau macht, dass die eckige klammer in der eckigen klammer als literale eckige Klammer behandelt wird, musst du selbst rausfinden).
|
flaimo
ILFTKYS
|
ich habs jetz mal mit $text = preg_replace('(([^\[\{\|])([A-Z]+@[0-9]+\.[0-9]+:[A-Za-z]{1}[A-Za-z0-9]+)([^\]\}\|]))', ' {{Referenz|$2|$2}} ', $text)
probiert, dass funktioniert aber auch nicht.
|
flaimo
ILFTKYS
|
ok ich glaub ich habs: $text = preg_replace('(([^\[\{\|:A-Z]{1})([A-Z]+@[0-9]+\.[0-9]+:[A-Za-z]{1}[A-Za-z0-9]+))', '$1{{Referenz|$2|$2}}', $text);
das fehlende A-Z beim ersten ausschlussteil hat gefehlt
|