-1

我有这个 JS 风格的正则表达式

^[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$

我在 JS 中尝试过,它对我有用(只想匹配不以 HTTP/HTTPS 协议开头的 URL): https ://regex101.com/r/6y2Gnd/2

现在我想在我的 Java 后端使用相同的正则表达式。起初我得到了错误

未封闭的字符类

读完后,我意识到我必须逃避\斜线。我基本上\\\在每个\斜杠上加了三个。结果是:

^[\\\\w.-]+(?:\\\\.[\\\\w\\\\.-]+)+[\\\\w\\\\-\\\\._~:/?#[\\\\]@!\\\\$&'\\\\(\\\\)\\\\*\\\\+,;=.]+$

尽管编译器不再显示任何错误,但结果是空的,即它无法像在 JS 风格中那样匹配案例。

我在这里和我的代码中测试了 Java 正则表达式。

www.web.de # I want to match this
web.de # I want to match this
http://web.de # I do NOT want to match this
https://www.web.de # I do NOT want to match this

有人知道我错过了什么吗?

4

1 回答 1

0

以下正则表达式在 Java 正则表达式测试器中运行良好:

^[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#\[\]@!\$&'\(\)\*\+,;=.]+$

请自己试一试。反斜杠应添加在 [ 字符的前面。

于 2020-02-23T23:44:02.733 回答