首先,我正在尝试学习正则表达式,所以如果它可以更好,你可以自由地纠正它..
但我想要的是匹配不以“{”开头并以“|”结尾的网址。我试着制作一个,这是我能做的最好的事情:
^((?!{)((((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}
答案 0 :(得分:2)
您提供的正则表达式可以得到改进。它匹配无效的网址,例如http://www.abc...com
您可以在Regular Expression Library上找到几种不同的网址匹配模式。
答案 1 :(得分:1)
$
(?!)
\.
所以你的正则表达式变成了:
^((?!{)((((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