提问人:Henrik Petterson 提问时间:3/21/2017 更新时间:3/21/2017 访问量:1682
用于替换 http 和 https 链接的正则表达式
Regex to replace http AND https links
问:
我有以下功能定位链接:preg_replace()
$link = preg_replace(
"#http://([\S]+?)#Uis", '<a href="http://\\1">(link)</a>',
$link
);
它适用于链接,但显然不适用于链接。我怎样才能调整它,以便它也适用于链接。http
https
https
答:
5赞
Wiktor Stribiżew
3/21/2017
#1
只需在之后添加并匹配整个链接,然后使用反向引用从替换模式中引用它:s?
http
$0
$link = preg_replace(
"#https?://\S+#i", '<a href="$0">(link)</a>',
$link
);
查看 PHP 演示
细节:
https?
- 或http
https
://
- 文字字符序列\S+
- 一个或多个非空格符号i
- 不区分大小写的修饰符。
请注意,修饰符令人困惑(会写成 ,并且模式会变长),我建议删除它。U
?
??
如果图案中没有修饰符,则修饰符没有意义,因此它也是多余的,我建议也将其删除。s
.
评论
1赞
Henrik Petterson
3/21/2017
我从正则表达式中学到的几乎所有东西都是通过你在这里的回答。非常感谢。我有一个问题。有没有办法以正确识别 URL 部分的方式调整正则表达式。例如,如果您明白我的观点,以下内容将在 URL 中添加该部分。$link = 'hello http://example.com) world';
)
1赞
ManzoorWani
3/21/2017
为什么不在替代品中使用?<a href="$0">(link)</a>
0赞
Wiktor Stribiżew
3/21/2017
我认为有必要保留原始捕获。是的,也许,不再需要它了。
0赞
ManzoorWani
3/21/2017
@HenrikPetterson,您可以使用否定字符类来转义您不想匹配的字符。例如\S
[^\s\)]
评论