java - 正则表达式:索引附近未封闭的字符类

标签 java regex

我对正则表达式不太熟悉,并且我对 Java 中的正则表达式字符串有一些问题。我收到以下错误:

Unclosed character class near index 198
<小时/>
"(?=^[\\x00-\\x7F]+$)^(([^<>()|[\\]\\\\.,;:\\s@\\\"\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"\"]+)*)|(\\\"\".+\\\"\"))@((\\[(2([0-4]\\d|5[0-5])|1?\\d{1,2})(\\.(2([0-4]\\d|5[0-5])|1?\\d{1,2})){3} \\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$"

有人能帮我解答一下这个问题吗?

从网络团队收到的原始模式是这样的(如果我们检查它 here ,它是一个有效的正则表达式):

(?=^[\x00-\x7F]+$)^(([^<>()|[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@((\[(2([0-4]\d|5[0-5])|1?\d{1,2})(\.(2([0-4]\d|5[0-5])|1?\d{1,2})){3} \])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

谢谢

最佳答案

该模式有多个缺点,但最严重的问题是在 Java 正则表达式中,您需要在字符类内转义 [

您还可以在 ^ 之后使用锚定前瞻(则无需在模式中使用两个 ^)。

此外,无需使用 [\""],因为 ["] 已经匹配单个 "

String rx = "^(?=[\\x00-\\x7F]+$)(([^<>()|\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\\\"\".+\\\"\"))@((\\[(2([0-4]\\d|5[0-5])|1?\\d{1,2})(\\.(2([0-4]\\d|5[0-5])|1?\\d{1,2})){3} \\])|(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}))$";

另请检查\\\"\".+\\\"\",不确定是否需要匹配""something here""

参见IDEONE demo

关于java - 正则表达式:索引附近未封闭的字符类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433403/

相关文章:

python - 使正则表达式准确匹配点文件

regex - 从正则表达式中获取参数

java - 如何返回 Eclipse?

java - OSGi ConfigAdmin 服务删除

java - 通过 Bundle 在 Activity 之间保留值

r - 字符串中格式错误的字符串

python - 如何使用 python 正确检查此正则表达式

java - 列出类上的公共(public)方法而不创建实例

java - Hibernate 实体依赖于列值

java - Java 中的正则表达式模式用于查找和删除重复的电子邮件