URL: https://www.overclockers.at/coding-stuff/solved_braeuchte_hilfe_bei_einer_kleinen_regular_e_182072/page_1 - zur Vollversion wechseln!
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 />';
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).
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)
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);
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025