我需要匹配除以下所有有效网址:
http://www.w3.org
http://w3.org/foo
http://www.tempuri.org/foo
通常,除某些域外的所有网址。
这是我到目前为止所做的:
https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?
会匹配足够接近我需要的网址(但绝不是所有有效的网址!)(谢谢,http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/!)
https?://www\.(?!tempuri|w3)\S*
会将所有网址与www.
匹配,但不会与tempuri
或w3
域匹配。
我真的想要
https?://([-\w\.]+)(?!tempuri|w3)\S*
工作,但是,但是,它似乎选择了所有http://
字符串。
Gah,我应该在Chomsky等级的更高层面做这件事!
答案 0 :(得分:3)
以下正则表达式:
https?://(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)\S*
仅匹配以下摘录中的前四个行:
https://ok1.url.com
http://ok2.url.com
https://not.ok.tempuri.com
http://not-ok.either.w3.com
http://no1.w3.org
http://no2.w3.org
http://tempuri.bla.com
http://no4.tempuri.bla
http://no3.tempuri.org
http://w3.org/foo
http://www.tempuri.org/foo
我知道你在想什么,答案是为了匹配上面的列表,只返回前两行,你必须使用以下正则表达式:
https?://(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)\S*
实际上,它只不过是对第一个正则表达式的轻微修改,其中
(?!w3|tempuri)([-\w]*\.)
部分连续出现两次。
你的正则表达式无法正常工作的原因是因为你加入时。在()*内,这意味着它不仅可以匹配 this。和 this.this。,还可以 this.this.th - 换句话说,它不一定以点结尾,因此它会强制它在任何地方结束,以便表达式匹配。在正则表达式测试器中试一试,你会明白我的意思。
答案 1 :(得分:0)