Регулярное выражение дает ошибку - PullRequest
1 голос
/ 02 апреля 2009

Продолжаем с поста на Регулярное выражение, разрешающее набор символов и запрещающее другие

Кто-нибудь знает, почему может произойти следующее?

Я получаю приведенную ниже ошибку при создании регулярного выражения в виде:

[^@*–’”“\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]+ 

не работает и выдает вышеуказанную ошибку.

Существует ли ограничение на количество символов, которое можно запретить, как описано выше?

С уважением, Удит Суд

Ответы [ 4 ]

3 голосов
/ 02 апреля 2009

Тире (знак минус) имеет особое значение в классах символов. Он определяет диапазоны последовательных символов, например "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)
2 голосов
/ 03 апреля 2009

См. http://webui.sourcelabs.com/jakarta-regexp/issues/22804 - старая версия этого пакета сделала ограничить максимальное количество допустимых диапазонов до 16. Это было исправлено в 2003 году, но вполне возможно, что они просто подняли немного ограничить. (?)

В любом случае, я всегда использую встроенный синтаксический анализатор Regex для любой новой работы, как предлагали другие.

0 голосов
/ 02 апреля 2009

Я сам не большой человек из Regex, но вот 3 сайта для тестирования Regex, которые могут помочь:

http://www.txt2re.com/index.php3
http://gskinner.com/RegExr/
http://regex.larsolavtorvik.com/

0 голосов
/ 02 апреля 2009

Похоже, какая-то ошибка в парсере apache regexp. Можете ли вы использовать стандартный (java.util.regex)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...