正则表达式匹配除某些 URL 之外的所有 URL

Noe*_*oel 5 regex url

我需要匹配所有有效的 URL,除了:

http://www.w3.org
http://w3.org/foo
http://www.tempuri.org/foo

通常,除某些域之外的所有 URL。

这是我到目前为止所拥有的:

https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?  
Run Code Online (Sandbox Code Playgroud)

将匹配足够接近我的需求的URL(但绝不是所有有效的URL!)(谢谢,http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/! )

https?://www\.(?!tempuri|w3)\S*
Run Code Online (Sandbox Code Playgroud)

将匹配所有包含www.,但不在tempuriw3域中的 URL。

我真的想要

https?://([-\w\.]+)(?!tempuri|w3)\S*
Run Code Online (Sandbox Code Playgroud)

工作,但afaick,它似乎选择了所有http://字符串。

啊,我应该在乔姆斯基层次更高的地方做这件事!

Pet*_*erM 6

下面的正则表达式:

https?://(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)\S*
Run Code Online (Sandbox Code Playgroud)

仅匹配以下摘录中的前四行:

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
Run Code Online (Sandbox Code Playgroud)

我知道您在想什么,答案是为了匹配上面的列表并仅返回前行,您必须使用以下正则表达式:

https?://(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)\S*
Run Code Online (Sandbox Code Playgroud)

事实上,这只不过是对第一个正则表达式的轻微修改,其中

(?!w3|tempuri)([-\w]*\.)
Run Code Online (Sandbox Code Playgroud)

部分连续出现两次。

您的正则表达式不起作用的原因是因为当您包含 . 在 ()* 内,则意味着它不仅可以匹配this。还有这个。这个。还有this.this.th - 换句话说,它不一定以点结尾,因此它将强制它在必须结束的地方结束,以便表达式匹配。在正则表达式测试器中尝试一下,您就会明白我的意思。