Проблема с% и / в регулярном выражении Java - PullRequest
1 голос
/ 09 июля 2010

У меня проблема с символами% и / в регулярном выражении Java. Следующий пример проиллюстрирует мою проблему:

Pattern pattern = Pattern.compile("^[a-z]*[/%]$");
Matcher m = pattern.matcher("a%/");
System.out.println(m.find());

Он печатает «ложь», когда я ожидаю, что это «правда». Знак% и / не должен быть экранирован, но даже если я это сделаю, он все равно не будет работать.

Так что мой вопрос просто почему?

Ответы [ 3 ]

5 голосов
/ 09 июля 2010

^[a-z]*[/%]$ соответствует нулю или более строчных букв, за которыми следует один символ, который может быть либо / или % - чтобы разрешить несколько символов, используйте

^[a-z]*[/%]+$

+ означает одинили больше;используйте * для нуля или более.

Если бы у вас не было $ в конце регулярного выражения, оно соответствовало бы a% в строке a%/.

$ соответствует концу строки.

1 голос
/ 09 июля 2010

Ваше регулярное выражение говорит: «ноль или более строчных букв затем / или % затем конец строки».

Строка соответствует, пока не получит / когда он искал конец строки.

Вы, вероятно, хотите убрать квадратные скобки, чтобы сказать "/ затем %"

0 голосов
/ 09 июля 2010

Вы просто проверяете наличие одного из [%/] символов, а не возможность наличия обоих.

Попробуйте [%/]? (или +, *, в зависимости от того, что вы хотите)

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