【问题标题】:UrlLinker not matching % in urlUrlLinker 与 url 中的 % 不匹配
【发布时间】:2014-02-02 20:16:45
【问题描述】:

我正在使用 UrlLinker https://bitbucket.org/kwi/urllinker/src 来匹配我网站上 cmets 中的 URL

自从我第一次使用它以来,它对我来说效果很好,但是它不适用于这个链接

http://example.com/files/213913702712nqh%297cwGb$_1D_e.jpg

此链接匹配到% 符号,其余部分保留为纯文本:

<a href="http://example.com/files/213913702712nqh">http://example.com/files/213913702712nqh</a>%297cwGb$_1D_e.jpg

如何修改正则表达式以匹配% 符号?因为那个 URL 是有效的。

这是正则表达式

{\b(https?://|ftp://)?(?:([^]\\\x00-\x20\"(),:-<>[\x7f-\xff]{1,64})(:[^]\\\x00-\x20\"(),:-<>[\x7f-\xff]{1,64})?@)?((?:[-a-zA-Z0-9]{1,63}\.)+[a-zA-Z][-a-zA-Z0-9]{1,62}|(?:[1-9][0-9]{0,2}\.|0\.){3}(?:[1-9][0-9]{0,2}|0))((:[0-9]{1,5})?(/[!$-/0-9:;=@_':;!a-zA-Z\x7f-\xff]*?)?(\?[!$-/0-9:;=@_':;!a-zA-Z\x7f-\xff]+?)?(#[!$-/0-9:;=@_':;!a-zA-Z\x7f-\xff]+?)?)(?=[)'?.!,;:]*([^-_$+.!*'(),;/?:@=&a-zA-Z0-9]|$))}{\b(https?://|ftp://)?(?:([^]\\\x00-\x20\"(),:-<>[\x7f-\xff]{1,64})(:[^]\\\x00-\x20\"(),:-<>[\x7f-\xff]{1,64})?@)?((?:[-a-zA-Z0-9]{1,63}\.)+[a-zA-Z][-a-zA-Z0-9]{1,62}|(?:[1-9][0-9]{0,2}\.|0\.){3}(?:[1-9][0-9]{0,2}|0))((:[0-9]{1,5})?(/[!$-/0-9:;=@_':;!a-zA-Z\x7f-\xff]*?)?(\?[!$-/0-9:;=@_':;!a-zA-Z\x7f-\xff]+?)?(#[!$-/0-9:;=@_':;!a-zA-Z\x7f-\xff]+?)?)(?=[)'?.!,;:]*([^-_$+.!*'(),;/?:@=&a-zA-Z0-9]|$))}

【问题讨论】:

  • 通过快速浏览源代码,看起来$rexPath = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?'; 不允许使用“%”字符,这可以解释为什么它只匹配您网址中的那个字符。我只需将它添加到“[]”之间的任何位置。事实上,我也允许 $rexQuery$rexFragment 使用它。

标签: javascript php regex url


【解决方案1】:

必须将其添加到$rexpath的字符类中:

$rexPath      = '(/[!$-/0-9:;%=@_\':;!a-zA-Z\x7f-\xff]*?)?';

【讨论】:

    【解决方案2】:

    您必须将百分号添加到 $rexNonUrl 变量中

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2012-08-03
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多