Wie preg_replace() mit einer einzigen Zeile, um die folgenden Ausgänge zu erreichen ?Regex PHP: "loswerden [link1] loswerden [link2] ... loswerden" - Problem 'loswerden', wenn es keine gibt [link]
$string1="get rid1 [link1] get rid2 [link2] ..."; // any number of links
echo "[<a href=link1>link1</a>][<a href=link2>link2</a>]";
$string2="get rid any text any text get rid"; // = no links: is a possibility
echo "";
Ich habe versucht, die folgende, die beispielsweise $ string1 funktioniert aber nicht für $ string2 oben:
$regex="/".
"[^\[\]]*". // the non-bracketed text before: -> eliminate
"\[(.*?)\]". // the bracketed text: [.]: -> convert into links
"[^\[\]]*"; // get rid of non-bracketed text after: -> eliminate
"/";
echo preg_replace($regex,'<a href=jp.php?jp=\1>[\1]</a>',$string1);
Ich denke nicht-einfangenden Gruppen (?:...)
funktionieren könnte, aber ich kann es nicht heraus ...
Ich bin verwirrt durch diese "loswerden". Ist es immer "loswerden"? Oder kann es etwas anderes sein? Es ist unklar. – BeemerGuy
und Sie sagen, es scheitert, wenn es keine "[Links]" gibt, dann wird es keine Ausgabe geben ... was ist das Scheitern? – BeemerGuy
"loswerden" könnte jeder Text ohne Klammern sein, sagen "bla bla blah Text blah Text [link1] bla bla [linktextofanysort2] blah Text blah". Irgendwie klarer jetzt? - Ich habe die ursprüngliche Frage geändert, siehe oben: ... – ajo