帮助URL Regex

时间:2011-03-25 12:46:24

标签: regex coldfusion

我有以下代码来格式化URL:

<cfset textToFormat = ReReplaceNoCase( textToFormat, '((http(s)?://)?((www\.)?\w+\.\w{2,6}))', '<a class="actionLink" href="http://\4">\1</a>', "ALL" ) />

问题在于复杂的URL无法正常工作,例如此URL:

http://refer.ccbill.com/cgi-bin/clicks.cgi?CA=111111&PA=222222

此类网址也不起作用:

http://secure.someurl.com/track/AAAAAA4wLjAuMC4w 

请有人帮助我使用可用于所有URL的RegEx。

由于

7 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

怎么样:

搜索模式:

(?:https?://)?(((\w+\.)+\w{2,6})(/.*)?)

替换

<a class="actionLink" href="http://\2">\1</a>

答案 2 :(得分:1)

你可以使用这个表达式:

(https?://)?(([a-z\d.-]+)(/.*)?)

并使用它:

<a class="actionLink" href="http://\2">\3</a>

一个简单的测试:

http://secure.someurl.com/track/AAAAAA4wLjAuMC4w提供<a class="actionLink" href="http://secure.someurl.com/track/AAAAAA4wLjAuMC4w">secure.someurl.com</a>

http://refer.ccbill.com/cgi-bin/clicks.cgi?CA=111111&PA=222222提供<a class="actionLink" href="http://refer.ccbill.com/cgi-bin/clicks.cgi?CA=111111&PA=222222">refer.ccbill.com</a>

secure.someurl.com/track/AAAAAA4wLjAuMC4w提供<a class="actionLink" href="http://secure.someurl.com/track/AAAAAA4wLjAuMC4w">secure.someurl.com</a>

最后refer.ccbill.com给出了<a class="actionLink" href="http://refer.ccbill.com">refer.ccbill.com</a>

答案 3 :(得分:1)

这是一个可能适合您的解决方案。首先,将以http://https://www.开头的网址链接起来,如下所示:

<cfset textToFormat = ReReplaceNoCase( textToFormat,
    '((https?://|www\.)[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$])',
    '<a class="actionLink" href="\1">\1</a>',
    "ALL" )
/>

接下来修复第一步创建的无效链接。 (以www.开头的网址需要http://前缀):

<cfset textToFormat = ReReplaceNoCase( textToFormat,
    'href="www\.',
    'href="http://www.',
    "ALL" )
/>

请注意,这是未经测试的,因为我无法访问ColdFusion。此外,他们的正则表达式语法记录很少,因此该解决方案仅使用非常基本的表达式。

注意事项:链接网址很难做到很好,并且很多情况下此解决方案都会失败。请参阅:Jeff Atwood的The Problem With URLs和John Gruber的An Improved Liberal, Accurate Regex Pattern for Matching URLs以及URL Linkification,以获取有关将网址转换为链接的更多信息。

答案 4 :(得分:0)

你的正则表达只评估这个长的网址:

http://secure.someurl.com

如果你想在网址之后评估部分,比如

/track/AAAAAA4wLjAuMC4w  

你必须在“正则表达式”的末尾添加类似“\。*”(带引号)之类的东西,所以它应该是

'((http(s)?://)?((www\.)?\w+\.\w{2,6})\.*)'

(我没有测试过它)

此致 斯蒂芬

答案 5 :(得分:0)

试一试

(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&amp;%\$#\=~_\-]+))

答案 6 :(得分:0)

在大多数正则表达式要求中,

http://regexlib.com/DisplayPatterns.aspx对我来说都是救星。

Try this