继续发帖 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]+
不起作用并给出上述错误。
上述方式可以禁止的字符数是否有限制?
此致 Udit Sud
答案 0 :(得分:3)
破折号(减号)在字符类中具有特殊含义。它定义了连续字符的范围,例如"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)
答案 1 :(得分:2)
请参阅http://webui.sourcelabs.com/jakarta-regexp/issues/22804 - 此软件包的旧版本已将限制允许范围的最大数量限制为16.这在2003年已修复,但可以想象它们只是提高了限制一点点。 (?)
无论如何,我总是使用Java内置的Regex解析器进行任何新工作,正如其他人所建议的那样。
答案 2 :(得分:0)
看起来像apache正则表达式解析器中的一些错误。你能使用标准版(java.util.regex)吗?
答案 3 :(得分:-1)
我自己不是一个大的正则表达式男人,但这里有3个可能有帮助的正则表达式测试网站:
http://www.txt2re.com/index.php3
http://gskinner.com/RegExr/
http://regex.larsolavtorvik.com/