1

我对 PHP 中的一些 preg_replace 函数有一点问题。首先,我需要$message = preg_replace("/\[img\](.*?)\[\/img\]/is", '<img src="$1" alt="" />', $message);用图像替换 [img]http://example.com/img.png[/img]。但在那之后,我还有一个 preg_replace 替换 URL:

$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);

是否可以防止其中的 URL<img src=''也被链接替换?就像将 URL 替换功能放在 img preg_replace 之前并更改它不会更改 BB-Code 括号内的 URL 的模式?

感谢您的回答!

4

2 回答 2

1

关于什么

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

更新:阅读下面的更新。

当然。使用负面的lookbehind来检查后面的内容。

它的语法类似于:

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

有关更多详细信息,请参阅perlre


更新:

似乎它并没有真正起作用。这个技巧的字面意思是没有'"落后,所以正则表达式实际上会看到这样的东西(匹配的字符串在<>.

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

不要使用这个技巧,你应该阅读preg_replace 中的 Ignore html 标签。有时正则表达式不是解决方案,这就是其中一种情况。

于 2012-04-04T19:24:44.597 回答