У меня есть этот небольшой фрагмент кода
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]"))
{
System.out.println(s);
}
}
Предполагается напечатать
dkoe
но он ничего не печатает!!
У меня есть этот небольшой фрагмент кода
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]"))
{
System.out.println(s);
}
}
Предполагается напечатать
dkoe
но он ничего не печатает!!
Добро пожаловать в метод Java без названия .matches()... Он пытается и сопоставляет ВСЕ входные данные. К сожалению, другие языки последовали этому примеру: (
Если вы хотите увидеть, соответствует ли регулярное выражение входному тексту, используйте метод Pattern, a Matcher и .find() для сопоставления:
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
// match
Если вам действительно нужно видеть, имеет ли вход только строчные буквы, вы можете использовать .matches(), но вам нужно сопоставить один или несколько символов: добавьте + к вашему классу символов, как в [a-z]+. Или используйте ^[a-z]+$ и .find().
[a-z] соответствует одиночному char между a и z. Итак, если ваша строка была просто "d", например, она бы соответствовала и печаталась.
Вам нужно изменить ваше регулярное выражение на [a-z]+, чтобы соответствовать одному или нескольким символам.
java-реализация регулярных выражений пытается сопоставить всю строку
который отличается от регулярных выражений perl, которые пытаются найти соответствующую часть
если вы хотите найти строку с ничем, кроме символов нижнего регистра, используйте шаблон [a-z]+
если вы хотите найти строку, содержащую хотя бы один символ нижнего регистра, используйте шаблон .*[a-z].*
String.matches возвращает, соответствует ли вся строка регулярному выражению, а не только любой подстроке.
Б
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]+"))
{
System.out.println(s);
}
}
Я столкнулся с одной и той же проблемой:
Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$");
Вышеуказанное не удалось!
Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)");
Вышеописанная работа с шаблоном в пределах ( и ).
Ваше регулярное выражение [a-z] не соответствует dkoe, так как оно соответствует только строкам длины 1. Используйте что-то вроде [a-z]+.
Вы можете сделать свой шаблонный регистр нечувствительным, выполнив:
Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);