2012-06-30 2 views
0

// pattern 20xx/xx/xx, e.g. 2012/2/22 
String Regex_Date_1 = "20\\d\\d/\\d{1,2}/\\d{1,2}"; 

String cell = "from 2011/7/31 to 2011/8/15 15:10-17:40,18:30-21:00"; 
System.out.println(cell); 

System.out.println("--- a ---"); 
System.out.println(cell.matches(Regex_Date_1)); 

System.out.println("--- b ---"); 
Pattern p = Pattern.compile(Regex_Date_1); 
Matcher m = p.matcher(cell); 
while(m.find()){ 
    System.out.println(m.group(0)); 
} 

результаты:Почему string.matches и pattern.matches получают разные результаты?


from 2011/7/31 to 2011/8/15 15:10-17:40,18:30-21:00 
--- a --- 
false 
--- b --- 
2011/7/31 
2011/8/15 

Почему string.matches вернуться ложным? но pattern.matches могут получить совпадения?

ответ

0

Потому что String#matches вернет true «если и только если эта строка соответствует данному регулярному выражению». Вы можете проверить документацию здесь: String#matches

Однако Matcher#find вернется true «если, и только если, подпоследовательность последовательности входных данных соответствует шаблону этого Сличитель в». Документацию можно найти здесь: Matcher#find.

Итак, чтобы подвести итог - String#matches, возвращает true, если вся строка соответствует регулярному выражению, а Matcher#find возвращает true, если некоторая подпоследовательность строки может быть сопоставлена ​​регулярным выражением.

+0

спасибо, мой вопрос может быть исправлен -> System.out.println (cell.matches (". * (" + Regex_Date + "). *")); –

+0

Я так не думаю. '. *' будет жадно соответствовать всем, поэтому остальное регулярное выражение будет проигнорировано. Вам нужно использовать '. *?', Чтобы правильно соответствовать тому, что вы хотите. – asenovm

0

Becucase

Regex_Date_1 = "20 \ д \ д/\ д {1,2}/\ д {1,2}";

matches (String regularExpression)

его метод возвращает истину, только если регулярное выражение совпадает со всей строкой ввода. A common mistake is to assume that this method behaves like contains(CharSequence); if you want to match anywhere within the input string, you need to add .* в начало и конец вашего регулярного выражения.

+0

спасибо, иногда нужно не только добавить. *, В моем случае мне нужно обернуть регулярное выражение как. * (My-regex). * –

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