Простая проблема регулярных выражений Java - PullRequest
1 голос
/ 12 февраля 2010

Почему этот код не будет работать?

assertTrue(Pattern.matches("[^a-zA-Z0-9]", "abc;"));

Ответы [ 5 ]

3 голосов
/ 12 февраля 2010

Поскольку метод .matches() пытается соответствовать всей строке, а ваше регулярное выражение не соответствует всей строке, только точка с запятой. Метод Matcher.find() будет работать (в этом случае: найдите символ, который не является буквой между a и z и числом от 0 до 9. Конечно, он также найдет á, ö и т. Д.)

Что ты действительно хочешь делать?

2 голосов
/ 12 февраля 2010

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

assertTrue(Pattern.compile("[^a-zA-Z0-9]").matcher("abc;").find());

это должно утверждать истину.

1 голос
/ 12 февраля 2010

Поскольку Pattern.matches() эквивалентно , соответствующий шаблон компилируется и передается в Matcher.matches(), который, , как указано , проверяет, соответствует ли весь ввод шаблону. Если вы хотите сопоставить только часть ввода, вместо этого вы должны использовать Matcher.find().

0 голосов
/ 12 февраля 2010

Потому что когда вы помещаете ^ внутрь, это означает любой символ не в a-z или A-Z . То, что вы хотите, это ^[a-zA-Z0-9]

0 голосов
/ 12 февраля 2010

попробуйте "^ [a-zA-Z0-9]" как образец

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