正規表現を使用して URL を検索し、それに応じてリンクしています。ただし、既にリンクされている URL をリンクしたくないので、後読みを使用して URL の前に href があるかどうかを確認しています。ただし、PHP の先読みおよび後読みでは可変長量指定子が許可されていないため、これは失敗します。
一致の正規表現は次のとおりです。
/\b(?<!href\s*=\s*[\'\"])((?:http:\/\/|www\.)\S*?)(?=\s|$)/i
この問題を回避する最善の方法は何ですか?
編集:
まだテストしていませんが、単一の正規表現でそれを行う秘訣は、PCRE でサポートされている正規表現内で条件式を使用することだと思います。次のようになります。
/(href\s*=\s*[\'\"])?(?(1)^|)((?:http:\/\/|www\.)\w[\w\d\.\/]*)(?=\s|$)/i
重要な点は、href がキャプチャされた場合、一致(?(1)^|)
しないことが保証されている条件により、一致がすぐに破棄されることです。おそらく何か問題があります。明日テストします。