4

正規表現に少し問題があります

Web サイト用のカスタム BBcode を作成しましたが、URL も解析する必要があります。

私は preg_replace を使用しています。これは URL を識別するために使用されるパターンです。

/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/is

これはうまく機能しますが、URL が [img][/img] ブロック内にある場合、上記のパターンもそれを取得し、次のような結果を生成します。

//[img]http://url.com/toimg.jeg[/img] will produce this result:
<img src="<a href="http://url.com/toimg.jeg" target="_blank">/>
//When it should produce:
<img src="http://url.com/toimg.jeg"/>

私はこれを使ってみました:

/([^"][\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/][^"])/is

運がない。

どんな助けでも大歓迎です。

編集: 解決策については、ステマの回答に関する2番目のコメントを参照してください。

4

1 に答える 1

3

これを試して

(?<!href=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])

ここでRegexrを参照してください

より一般的にするには、「=」のみをチェックするように後読みを単純化できます。

(?<!=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])

正規表現で見る

(?<!href=")は否定の後読みアサーションであり、パターンの前に "href="" がないことを保証します。

\bは、リンクの開始点を非単語から単語文字への変更に固定する単語境界です。これがないと、後読みは役に立たず、「ttp://...」から一致してしまいます。

于 2012-03-05T14:03:00.447 に答える