Ich benutze eine Regex, um alle URLs zu finden und sie entsprechend zu verknüpfen. Ich möchte jedoch keine URLs verknüpfen, die bereits verknüpft sind. Daher verwende ich Lookbehind, um zu sehen, ob die URL eine href hat. Dies schlägt jedoch fehl, da Quantifizierer variabler Länge in Lookahead und Lookbehind für PHP nicht erlaubt sind.negative Lookbehind und gierige Quantifikatoren in PHP
Hier ist die regex für das Spiel:
/\b(?<!href\s*=\s*[\'\"])((?:http:\/\/|www\.)\S*?)(?=\s|$)/i
Was ist der beste Weg, um dieses Problem?
EDIT:
Ich habe noch zu testen, aber ich denke, der Trick es in einer einzigen Regex zu tun bedingte Ausdrücke innerhalb der Regex verwendet, die von PCRE unterstützt wird. Es würde wie folgt aussehen:
/(href\s*=\s*[\'\"])?(?(1)^|)((?:http:\/\/|www\.)\w[\w\d\.\/]*)(?=\s|$)/i
Der entscheidende Punkt ist, dass, wenn die href erfasst wird, wird das Spiel sofort aufgrund der bedingten (?(1)^|)
hinausgeworfen, die nicht passen garantiert wird. Da ist wahrscheinlich etwas nicht in Ordnung. Ich werde es morgen testen.
Um, verwenden Sie einen HTML-Parser und verknüpfen Sie nur, wenn es ein Textknoten ist? – kennytm
Das ist wahrscheinlich die beste Lösung. Ich war mehr neugierig, ob es eine Möglichkeit gab, die Regex anzupassen. –
+1 nette Frage. – NikiC