Почему этот код не сработает?Простая проблема с java-regexp
assertTrue(Pattern.matches("[^a-zA-Z0-9]", "abc;"));
Почему этот код не сработает?Простая проблема с java-regexp
assertTrue(Pattern.matches("[^a-zA-Z0-9]", "abc;"));
Если не удается, потому что матчи сопоставляет полную строку, ваше регулярное выражение соответствует 1 символ, который не является в характере диапазоны вы перечисляете, если вы смените:
assertTrue(Pattern.compile("[^a-zA-Z0-9]").matcher("abc;").find());
он должен утверждать, правда.
Поскольку метод .matches()
пытается сопоставить всю строку, и ваше регулярное выражение не совпадает со всей строкой, только точка с запятой. Метод Matcher.find()
будет работать (в этом случае: найдите символ, который не является буквой между a и z, а не числом от 0 до 9. Конечно, он также найдет á, ö и т. Д.)
Что это такое вы действительно хотите это сделать?
Поскольку Pattern.matches()
is equivalent to соответствующий шаблон составляется и подается в Matcher.matches()
, которые, as specified, проверяет, если все входные соответствует шаблону. Если вы хотите только совместить часть ввода, вместо этого вы должны использовать Matcher.find()
.
попробовать "^ [A-Za-Z0-9]" как образец
Я считаю, что ОП пытается сопоставить ';' в целевой строке. Так что это не правило регулярное, это неправильно, он использует 'matches()' вместо 'find()', как указывали другие. В любом случае «попробуйте это вместо» не является особенно полезным ответом. –
Потому что, когда вы положить^внутри, это означает any char not in a-z or A-Z. Что вы хотите ^[a-zA-Z0-9]
Он будет утверждать true, сопоставляя ''; "', но я подозреваю, что это не то, что имел в виду ОП. – finnw
Да, вот что я имею в виду. Что делать, если я использую Pattern.matches (". * [^ A-zA-Z0-9]. *", "Abc;")? Это то же самое? – jackysee
@jackysee. Это приведет к такому же поведению. Разница заключается в том, что между поиском не буквенно-цифровой и проверкой того, что строка имеет формат «ничего», «не буквенно-цифровой» «ничего», что не совсем то же самое. Используя find, вы можете искать следующий не-альфа-символ в своей строке, используя совпадения, которые вы не можете сделать, например. – rsp