1

我想创建一个与 URL 匹配的正则表达式,除了包含“youtube”的 URl。

我已经完成了这个与所有 URL 匹配的正则表达式:

(www+\.)?[\w-]+s{0,3}[/\.,;:!]{1,3}\s{0,3}(r[o0]|n[e3]t|lt|c[o0]m|[i!]nf[o0]|[o0]rg|b[i!][z2]|ru|[e3]du)(\/)?

但我想添加正则表达式,如果 URL 包含“youtube”,则不匹配。

我们有一个大系统来过滤我们收到的句子,例如,对于收到的每个句子,我们应用几个正则表达式。我想要一个正则表达式,这句话包含一个 URL 但不包含“youtube”。

可能吗?

谢谢

4

5 回答 5

4

我会这样做:

正则表达式

(www+\.)?(?!youtube)([\w-]+s{0,3})[/\.,;:!]{1,3}\s{0,3}(r[o0]|n[e3]t|lt|c[o0]m|[i!]nf[o0]|[o0]rg|b[i!][z2]|ru|[e3]du)(\/)?

正则表达式图片

测试

youtube.com            => No Match
test.n3t               => Match
wwwwwww.coucous::.3du  => Match
utube;;; r0            => Match
于 2013-06-21T09:29:54.997 回答
1

不要为此使用正则表达式,请使用URI

final URI uri = new URI(inputString);

// test against this URI's `.getHost()`, or `.getPath()`; whatever is relevant

使用红铁/硝酸(1)将此铭刻在您的脑海中:每次您必须对纯 Java 中的 URL 或任何 URI 进行内容检查时,请使用URI. 不是正则表达式。URI 会为你解析这个东西。

哦,还有一件事:与 不同URL,与 相比.equals()URI不会尝试解析主机名。这不是开玩笑。使用 URL 作为映射或集合成员的键是自找麻烦……幸运的是,URL有一个.toURI()方法。

(1) 选择你的选择

于 2013-06-21T08:34:10.350 回答
0

这里提到了一个类似的排除(正则表达式匹配 url 不包含给定的字符串集) - 只需更改您的正则表达式以具有负前瞻

于 2013-06-21T08:28:17.517 回答
0

你需要一个正则表达式吗,假设你的Url是一个字符串......

!(yourUrl.contains("youtube"))
于 2013-06-21T08:30:37.097 回答
0

这是“正则表达式匹配除 youtube 之外的所有 url ” 的一个很好的例子

https://stackoverflow.com/a/6681321/2413470

(?!\S+youtube\.com)((?<!\S)(((f|ht){1}tp[s]?:\/\/|(?<!\S)www\.)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+))

如果这个正则表达式对你没有用,请告诉我

于 2013-06-21T08:55:33.907 回答