正则表达式不捕获字符串中间的匹配

时间:2012-12-17 04:12:02

标签: c# regex url

我开始使用的正则表达式是:

?[?\ W + \ W +]!:

^(((HTTP | FTP | | HTTPS WWW)//)()+([A-ZA-Z0-9 \〜\ @#\ $ \%\ ^ \&安培; *()_- \ = + \ / \ \:??\; \'\,] *))$

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

然而,如果它的任何一方有任何文字,它就找不到匹配(这种做法违背了我正在做的目的)。 :)

不匹配:

  • 转到www.google.com
  • www.google.com是最好的。
  • 我一直都去www.google.com。
  • 等...

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

2 个答案:

答案 0 :(得分:3)

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

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

删除它们(以及主播^$)后,您的正则表达式将无法与明显的非网址匹配。

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

答案 1 :(得分:0)

我认为你应该使用积极的向前看,即要搜索给定的url,首先检查两种可能性,要么是在整个字符串的开头还是在middile。

但你应该使用^((?= url)?|。?(?= url)。*?$)) 这只是一个开始,我不是给你一个答案,只是一个想法。 我会这样做,但此刻我很懒,而且你的正则表达式需要20分钟的分析。

stackoverflow擦除了我的例子中的一些内容