java - 正则表达式给出错误

标签 java regex

继续发表在 Regular expression to allow a set of characters and disallow others

有人知道为什么会出现下面的情况吗?

创建正则表达式时出现以下错误:

[^@*–’”“\r\nœçsÇSgGšcrŠRNEŽDTCnežuUIti—¿„”]+ 

并在输入字段中输入任何这些受限字符

java.lang.ArrayIndexOutOfBoundsException
    at org.apache.regexp.RECompiler$RERange.delete(RECompiler.java:1326)
    at org.apache.regexp.RECompiler$RERange.remove(RECompiler.java:1417)
    at org.apache.regexp.RECompiler$RERange.include(RECompiler.java:1459)
    at org.apache.regexp.RECompiler$RERange.include(RECompiler.java:1470)
    at org.apache.regexp.RECompiler.characterClass(RECompiler.java:699)
    at org.apache.regexp.RECompiler.terminal(RECompiler.java:863)
    at org.apache.regexp.RECompiler.closure(RECompiler.java:942)
    at org.apache.regexp.RECompiler.branch(RECompiler.java:1151)
    at org.apache.regexp.RECompiler.expr(RECompiler.java:1203)
    at org.apache.regexp.RECompiler.compile(RECompiler.java:1281)
    at org.apache.regexp.RE.(RE.java:495)
    at org.apache.regexp.RE.(RE.java:480)

但是这个表达式工作得很好

[^@*–’”“\r\nœçsÇSgGšcrŠRN]+

此外,

[^@*–’”“\r\nœçsÇSgGšcrŠR„”]+ 

有效但是

[^@*–’”“\r\nœçsÇSgGšcrŠRNE]+ 

不起作用并出现上述错误。

是否有像上面那样可以禁止的字符数限制?

问候, 向南

最佳答案

破折号(减号)在字符类中有特殊含义。它定义了连续字符的范围,例如 "a-z"

"*–'" 可能存在连续范围,但我想这不是您的意图。您可能想要字面上的破折号,我怀疑您看到的异常与此有关。

取而代之的是:

[^@*–’”“\r\nœçsÇSgGšcrŠRNEŽDTCnežuUIti—¿„”]+
----^ (this is the error)

尝试:

[^@*’”“\r\nœçsÇSgGšcrŠRNEŽDTCnežuUIti—¿„”–]+
-----------------------------------------^ (this okay)

[-^@*’”“\r\nœçsÇSgGšcrŠRNEŽDTCnežuUIti—¿„”]+
-^ (this okay as well)

[^@*\–’”“\r\nœçsÇSgGšcrŠRNEŽDTCnežuUIti—¿„”]+
----^^ (this okay as well)

关于java - 正则表达式给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/709195/

相关文章:

java - 我如何使用 Java 与 Selenium Webdriver 中的此输入框进行交互?

java - 如何将 Java 源代码漂亮地打印为 PDF?

java - 哈希码未正确哈希

Python 正则表达式 : matching parentheses in newest version (Feb 2019)

ios - 在 Objective C 中使用正则表达式

java - 如果从 Java 控制台读取正则表达式字符,为什么不需要转义?

java - 确定字符串模式 "a+b"

java - 如何在Java中的xml字符串中包含 "encoding="UTF-8""?

javascript - 为页面上的所有数字设置专门的字体

Java同步计数器不同线程打印相同的值