0

我开始的正则表达式是:

^(((http|ftp|https|www)://)?([\w+?.\w+])+([a-zA-Z0-9\~!\@#\$\%\^\ &*()_-\=+\/\?.\:\;\'\,]*)?)$

我正在使用它在用户提供的文本中间查找 URL 并将其替换为超链接。这工作正常并匹配以下内容:

但是,如果它的两边有任何文本,它就找不到匹配项(有点违背了我正在做的事情的目的)。:)

没有匹配:

  • 访问 www.google.com
  • www.google.com 是最好的。
  • 我经常访问 www.google.com。
  • ETC...

如何更改它以便无论它出现在字符串中的哪个位置都匹配?我对正则表达式很糟糕......

4

2 回答 2

3

您的原始正则表达式中有一个错误。方括号构成\w+?\.\w+一个字符类:

(((http|ftp|https|www)://)?([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?)
                            ^         ^

删除它们(以及锚点^$)后,您的正则表达式将不匹配明显的非 URL。

我建议使用http://regexpal.com/来测试正则表达式,因为它在正则表达式中具有语法突出显示。

于 2012-12-17T04:26:05.857 回答
0

我认为您应该向前看,即搜索给定的 url 以首先检查两种可能性,无论是在整个字符串的开头还是在中间。

但是您应该使用 ^((?=url) ?|. ?(?=url).*?$)) 之类的东西,这只是开始,我没有给您答案,只是一个想法。我会这样做,但目前我很懒,你的正则表达式会寻找 20 分钟的分析。

stackoverflow 删除了我的示例中的一些内容

于 2012-12-17T05:17:15.337 回答