0

次のコードを使用してハイパーリンクを実現するためにユーザー入力を処理するときに、PHPのpreg_replaceで正規表現を使用しています。

preg_replace(
   '!(((f|ht)tp://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i',
   '<a class="external" href="$1">$1</a>',
   $text
);

ただし、私がする必要があるのは、に含まれるすべてのリンクを無視する{{ }}ことです。たとえば、この入力は正規表現で処理する必要があります。

http://www.example.com/

この入力は無視する必要があります。

{{http://www.example.com/}}

正規表現パターンを期待どおりに機能するように変更するにはどうすればよいですか?

4

1 に答える 1

3

(?<!...)正規表現をネガティブルックビハインド( )とネガティブルックアヘッド((?!...))で囲みます。

'/(?<!\{\{)(((f|ht)tp:\/\/)[-a-zа-я()0-9@:%_+.~#?&;\/=]+)(?!\}\})/i'

または、テキストを1語ずつ調べ、URL解析ライブラリを使用してその単語が有効なURLであるかどうかを確認します(URLにスペースを含めることはできません)。この場合のみ交換してください。

于 2013-01-10T23:48:36.003 に答える