如何将 % 添加到以下 preg_replace 代码及其工作原理
Posted
技术标签:
【中文标题】如何将 % 添加到以下 preg_replace 代码及其工作原理【英文标题】:How to add % to the following preg_replace code and how it works 【发布时间】:2014-10-27 06:04:53 【问题描述】:这是代码
preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s);
这里的问题是它没有检测到这个 url
http://localhost:88/xyz%20abc/abc/Result%20Publication%20Page.php
虽然它检测到第一个 %20,但它没有检测到 url 末尾的其他 %20。
抱歉这个菜鸟问题。我搜索了但没有得到具体的答案。
提前致谢。
【问题讨论】:
每个要匹配的 url 是否以https?://
开头还是必须是可选的?
如果要匹配url可以使用(https?://)?\S+
@Fede 与(https?://)?\S+
匹配almost everything,这就是我问的原因:)
@Jonny5 是的,我知道,但 OP 使用它
【参考方案1】:
只需删除第一个点之前的\
。
((https?://)?([-\w]+.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)
DEMO
或
((https?://)?([-\w]+[.:%][-\w\./]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)
DEMO
第一组包含您想要的链接。
【讨论】:
以上是关于如何将 % 添加到以下 preg_replace 代码及其工作原理的主要内容,如果未能解决你的问题,请参考以下文章
如何将 preg_replace e 转换为 preg_replace_callback?
Ecshop如何解决Deprecated: preg_replace()报错