匹配网址与特殊的开始和结束

时间:2011-09-06 14:25:12

标签: regex url

首先,我正在尝试学习正则表达式,所以如果它可以更好,你可以自由地纠正它..

但我想要的是匹配不以“{”开头并以“|”结尾的网址。我试着制作一个,这是我能做的最好的事情:

^((?!{)((((ht|f)tps?:\/\/)|(www.))[a-zA-Z0-9_\-.:#/~}?]+)(?=\|))

正则表达式只匹配不以“{”开头并以“|”结尾的网址。我试图否定(?= \ |)部分但是它与任何东西都没有匹配......

修改

需要匹配正则表达式的网址:

hey this url www.test.com needs to match
http://test.com
{www.thissiteneedstomatchtoo.com}

不允许匹配的网址:

{www.test.com|title of my page}

2 个答案:

答案 0 :(得分:2)

您提供的正则表达式可以得到改进。它匹配无效的网址,例如http://www.abc...com

您可以在Regular Expression Library上找到几种不同的网址匹配模式。

答案 1 :(得分:1)

  • 将锚点添加到行$
  • 的末尾
  • 否定前瞻断言(?!)
  • 在www \.
  • 之后逃离点

所以你的正则表达式变成了:

^((?!{)((((ht|f)tps?:\/\/)|(www\.))[a-zA-Z0-9_\-.:#/~}?]+)(?!\|))$
                             __^                          __^  __^

修改

根据评论的新版本:

((?<!{)((((ht|f)tps?:\/\/)|(www\.))[a-zA-Z0-9_\-.:#/~}?]++)(?!\|))
                                            note this __^^

++:匹配至少1次,但尽可能多次

一些测试:

www.domain.com : OK -> www.domain.com
http://domain.com : OK -> http://domain.com
{www.domain.com : KO
www.domain.com| : KO
{www.domain.com| : KO
text text www.domain.com text text : OK -> www.domain.com
text texthttp://domain.com text text : OK -> http://domain.com
text text{www.domain.comtext text : KO
text textwww.domain.com|text text : KO
text text{www.domain.com|text text : KO

也匹配{www.thissiteneedstomatchtoo.com},您可以使用:

((?<={)?((((ht|f)tps?:\/\/)|(www\.))[a-zA-Z0-9_\-.:#/~}?]++)(?!\|))

但它会匹配{www.domain.com

www.domain.com : OK -> www.domain.com
http://domain.com : OK -> http://domain.com
{www.domain.com : OK -> www.domain.com
www.domain.com| : KO
{www.domain.com| : KO
text text www.domain.com text text : OK -> www.domain.com
text texthttp://domain.com text text : OK -> http://domain.com
text text{www.domain.com text text : OK -> www.domain.com
text textwww.domain.com|text text : KO
text text{www.domain.com|text text : KO
hey this url www.test.com needs to match : OK -> www.test.com
http://test.com : OK -> http://test.com
{www.thissiteneedstomatchtoo.com} : OK -> www.thissiteneedstomatchtoo.com}
{www.test.com|title of my page} : KO