2

私はこれを行うために多くの方法を試しましたが、私が望むことを部分的に行うように見える唯一の方法は、正規表現を使用した文字列否定および正規表現で特定の単語を否定する方法で説明されている先読み否定です? しかし、現在の正規表現では機能しません。

この文字列があると仮定します:

[url=http://www.example.com]this url BB tag should match[/url]
[url=http://www.example.com][spoiler]this url BB tag shouldn't match[/spoiler][/url]

編集:デバッグのために一致を返すべきではない、より詳細な文字列:

[url=http://www.example.com]Lorem[spoiler]this url BB tag shouldn't match[/spoiler]Ipsum[/url]

そして現在の正規表現パターン:

#\[url=([\w]+?://.*?)\]([^?\n\r\t].*?)\[/url\]#is

編集: 次の正規表現 (# と #is なし) を使用して、Regex Buddy でデバッグしています:

\[url=([\w]+?://.*?)\]([^?\n\r\t].*?)\[/url\]

(これら 2 つの正規表現は、簡単に適応できるため、アプリケーションに同じ効果があるはずです。より理にかなっている場合は、後者を使用してください)

文字列の両方の行に一致します。と の間に[spoiler]文字列がある場合に一致を返さないようにしたい。[url=xxxx://yyyy][/url]

否定的な先読みで実行できると思いますが、使用できなくすることなく現在の正規表現に挿入する方法を見つけることができないようです。

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

4

1 に答える 1

1

これで問題は解決するはずです。

'#\[url=([^\]]+)\](?!\[spoiler\])(.*?)\[/url\]#'
于 2012-04-18T03:22:55.307 に答える