如何将 % 添加到以下 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 没有转义“?”在参考文献中

如何将 preg_replace e 转换为 preg_replace_callback?

使用 preg_replace 保存换行符

Ecshop如何解决Deprecated: preg_replace()报错

ECSHOP如何解决DEPRECATED: PREG_REPLACE()报错

从 preg_replace 到 preg_replace_callback