我开始使用的正则表达式是:
?[?\ W + \ W +]!:^(((HTTP | FTP | | HTTPS WWW)//)()+([A-ZA-Z0-9 \〜\ @#\ $ \%\ ^ \&安培; *()_- \ = + \ / \ \:??\; \'\,] *))$
我正在使用它在用户提供的文本中间查找URL并将其替换为超链接。这很好,并匹配以下内容:
然而,如果它的任何一方有任何文字,它就找不到匹配(这种做法违背了我正在做的目的)。 :)
不匹配:
我怎样才能更改它以便无论它出现在字符串的哪个位置都匹配?我对正则表达式很糟糕......
答案 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擦除了我的例子中的一些内容