正则表达式忽略youtube

时间:2010-12-06 13:25:32

标签: regex

一个小的正则表达式问题,对于那些知道的人来说很容易,对于那些不知道的人来说是不可能的。)

我对正则表达式的经验很少,所以我需要你的帮助。我有一个匹配网址的模式

[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]

这匹配所有网址我只需要更改此正则表达式,以便它匹配所有网址,但不包括“youtube.com”网址。

http://www.google.com MATCH
http://example.com MATCH
http://asdasdasfsadfsdfasfsdfs.com MATCH
http://www.youtube.com MUST NOT MATCH
http://youtube.com MUST NOT MATCH

(我认为你明白了)

先谢谢你们!

3 个答案:

答案 0 :(得分:2)

您可以使用否定前瞻:

^(?!http:\/\/(?:www\.)?youtube\.com).*$

See it

答案 1 :(得分:2)

我建议稍微修改一下codaddict的答案:

^(?!http:\/\/(?:.*\.)*youtube\.com).*$

这也会丢弃youtube.com的任何其他子域名。

答案 2 :(得分:1)

将正则表达式更改为

[[:alpha:]]+://(?!(?:[^:/ ]+\.)?youtube.com)[^<>[:space:]]+[[:alnum:]/]

在此测试:http://rubular.com/r/Am4YFcCsf9

关键部分是[^:/ ]

胡萝卜说//和youtube.com之间可能没有什么。您可能希望将其更改为不允许标签[^:/ \t]或使其仅允许某些字符,例如。 - 字母数字下划线[\.\-A-Za-z0-9](也有效[\w\.\-]

编辑:阅读评论后

我的建议现在是

[[:alpha:]]+://(?!(?:https?:/+)*(?:[^:/ ]+\.)?youtube.com)[^<>[:space:]]+[[:alnum:]/]