2013-07-11 4 views
1

Я получаю сообщение об ошибке с моим регулярным выражением. Вот сообщение:Недопустимый диапазон символов в regex

Сообщение: Незаконный диапазон знаков вблизи индекса 17 . [?! ~ @ # $%^&() _- + = [] | \ ;: ' «<> /.?] {8,9} * ^

. Примечание:^в конце сообщения ниже знака +.

Вот мой код:

private static final String PASSWORD_PATTERN_SPECIAL_8 = ".*[[email protected]#$%^&*()_-+=[]|\\;:‘“<>,.?/]{8,9}.*"; 

ответ

3

Похоже, что вы работаете в Java.

Try:

1. `Pattern.Quote()` function 

2. \Q(characterlistHereWithoutbracket)\E 

3. Escape the character manually by using `\` in front of the 
    character. 

Второй вариант использует любую вещь, как литерал, который лежит между \Q..\E.

EDIT

Что касается второго варианта, я имею в виду вы можете использовать его, как указано в примере this. См. Специальные символы.

Или вы можете проверить, если qouted шаблон ваш движок регулярных выражений использует похож на что-то вроде этого или нет:

\.\*\[~\[email protected]\#\$%\^&\*\(\)_-\+=\[]\|\\\\;:‘"<>,\.\?/]\{8,9}\.\* 

Примечание: Эта модель получается .Net Regex.Escape() функции.

+0

Да. все еще получая ошибку даже после выхода из символов, которые нужно было избежать. По второму варианту я очень смущен. Пожалуйста, уточните. Спасибо. – coferniecus

+0

BTW, решение относится и к Scala. В местах, где Pattern.Quote (и эквиваленты в языке diff) трудно использовать, ваше второе предложение работает как шарм: \ Q и \ E. Я использовал его так в шаблоне регулярного выражения scala: "^ \\ w [\\ w \\ Q - =:;. /.$ \\ Е] *»г – panther

0

Вы должны избежать двойные кавычки внутри строки

private static final String PASSWORD_PATTERN_SPECIAL_10 = ".*[[email protected]#$%^&*()_-+=[]|\\;:‘\“<>,.?/]{10,20}.*"; 
+0

Это сработало. Благодарю. После тщательной проверки выясняется, что «и» отличается от того, что я скопировал его из MS Word из документа, который я создал.Я также избежал одиночной цитаты. Благодарю. – coferniecus

+0

Извилистые линии были удалены, но ошибка все тот же. он все еще указывает ниже +. – coferniecus

+0

Идя по тем же строкам, в тексте ведущий «[» выглядит курсивом. Может ли это быть уродцем из Слова? На самом деле это кажется правдой для некоторых других персонажей, таких как «?» и "!". Возможно, вставьте блокнот, чтобы убедиться, что у вас все действующее. – asantaballa

0

Специальные RegEx символы

.\\+*?^$[]{}()|/ 

В скобках только избежать

  1. ^ при старте,

  2. - в середине,

  3. ], и

  4. \\.

Чертеж должен быть экранирован, если он не является первым или последним символом в скобках.

Последовательность \_-\\+ ищет все символы между _ и +.

Возможно, также потребуется экранирующая скоба.

Смежные вопросы