1

PHPのいくつかのpreg_replace関数に少し問題があります。まず$message = preg_replace("/\[img\](.*?)\[\/img\]/is", '<img src="$1" alt="" />', $message);、[img] http://example.com/img.png[/img]を画像に置き換える必要があります。しかしその後、URLを置き換えるpreg_replaceもあります。

$message = preg_replace("/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/", '<a href="$1">title[$1]</a>', $message);

<img src=''内のURLもリンクに置き換えられるのを防ぐことは可能ですか?img preg_replaceの前にURL置換関数を配置し、BBコード括弧内にあるURLを変更しないようにパターンを変更するのと同じように?

答えてくれてありがとう!

4

2 に答える 2

1

どうですか

$message = preg_replace("/(?i)\b[^\"]((?:htt ...
于 2012-04-04T19:24:30.023 に答える
1

更新:以下の更新をお読みください。

もちろん。ネガティブルックビハインドを使用して、背後にあるものを確認します。

構文は次のようになります。

(?x)
# Match abc if there is no ' or " behind
(?<!['"]) abc

詳細については、perlreを参照してください。


アップデート:

それは実際には機能しないようです。トリックは文字通り「ない」'または「"遅れている」ことを意味するため、正規表現は実際には次のようなものを認識します(一致する文字列がにある場合)<>

"http://<example.com/img>.png"

このトリックを使用する代わりに、preg_replaceのHTMLタグを無視するを読む必要があります。正規表現が解決策ではない場合があり、それはそのようなケースの1つです。

于 2012-04-04T19:24:44.597 に答える