这些正则表达式模式匹配什么?
我是 PHP 中正则表达式的新手,了解基本模式,但是下面的模式有点复杂,我不明白以下模式匹配什么:
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#... "<a href='' rel='nofollow'></a>", $ret);
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*... "<a href='http://' rel='nofollow'></a>", $ret);
有人可以解释一下吗?
谢谢。
I am new to regex in PHP and understand the basic patterns however the ones below are a bit complex and I don't understand what the following pattern matches:
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#... "<a href='' rel='nofollow'></a>", $ret);
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*... "<a href='http://' rel='nofollow'></a>", $ret);
Could someone please explain them?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
简而言之:用链接替换 URL。
详细信息:
第一个正则表达式描述以单词字符 (
[\w]+
) 开头、后跟://
和一个或多个字符的序列集合[\w\#$%&~/.\-;:=,?@\[\]+]
。这可能应该与以 URL 协议/方案开头的 URL 匹配,例如
http://
、https://
或ftp://.
但它也会匹配
javascript://
。 这不太好:javascript://%0Aalert%28%22booo%21%22%29
等于 JavaScript 代码:<前><代码>//
警报(“嘘!”)
第二个正则表达式描述以
www.
或ftp.
,同样后跟一组[\w\#$%&~/.\-;:=,?@\[ 中的一个或多个字符\]+]
。这可能应该与以
www.
或ftp.
开头的 URL 匹配。 然后将 URL 协议/方案添加到 URL 中。In short: Replace URLs by links.
In detail:
The first regex describes sequences that begin with word characters (
[\w]+
), followed by://
, followed by one or more characters of the set[\w\#$%&~/.\-;:=,?@\[\]+]
.That should probably match a URL beginning with the URL protocol/scheme like
http://
,https://
orftp://
.But it would also match
javascript://
. And that’s not good:javascript://%0Aalert%28%22booo%21%22%29
equals the JavaScript code:The second regex describes sequences that begin with either
www.
orftp.
, again followed by one or more characters of the set[\w\#$%&~/.\-;:=,?@\[\]+]
.That should probably match URLs, that just begin with
www.
orftp.
. The URL protocol/scheme is then added to the URL.获取 RegexBuddy,它会向您解释 (查看屏幕截图)任何正则表达式的含义。 SO 中还有另一个 anwser 演示了这一点。
无论如何,根据
preg_replace
的第二个参数,它们应该匹配 URL 并对其进行标记。Get RegexBuddy, and it explains you (see screenshots) what any regular expression means. There is another anwser here in SO that demonstrates that.
Anyway, according to the second arguments of the
preg_replace
s, they should match URLs and tagify them.