SOLVED: Bräuchte Hilfe bei einer kleinen Regular Expression…

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/solved_braeuchte_hilfe_bei_einer_kleinen_regular_e_182072/page_1 - zur Vollversion wechseln!


flaimo schrieb am 06.07.2007 um 19:38

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):

Code: PHP
$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?


that schrieb am 06.07.2007 um 20:31

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 schrieb am 06.07.2007 um 20:56

ich habs jetz mal mit

Code: PHP
$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 schrieb am 06.07.2007 um 23:19

ok ich glaub ich habs:

Code: PHP
$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




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025