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

时间:2015-10-30 10:08:02

标签: java regex

我对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,}))$

由于

1 个答案:

答案 0 :(得分:1)

模式中存在多个缺点,但最严重的问题是在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