Почему регулярное выражение не совпадает без граничного сочетания «начало линии»?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему регулярное выражение не совпадает без граничного сочетания «начало линии»?

Сообщение Anonymous »

Есть то, чего я не понимаю в регулярных выражениях Явы. У меня есть следующая строка (и мне нужна «на сегодняшний день»): < /p>

Код: Выделить всё

From Date :01/11/2011 To Date :30/11/2011;;;;;;;;;;;;;
< /code>

Я думаю, что следующее регулярное выражение (в Perl) соответствовало бы. < /p>

to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4})
< /code>

В Java этот шаблон не соответствует. Но это происходит, если я добавлю впереди и в конце a.+< /Code>
, так что этот шаблон работает в Java: < /p>

Pattern p = Pattern.compile(".+to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4}).+", Pattern.CASE_INSENSITIVE);
Чего я не понимаю: мне было бы ясно, что первый шаблон не совпадает в Java, если я добавлю ^ (начало строки) и $ в конце строки. Это будет означать, что шаблон должен соответствовать всей линии. Но без этого первый шаблон должен совпадать, потому что почему шаблон заботится о строковых данных, которые не имеют возможности этого шаблона, если я не устанавливаю разделители впереди и в конце? Это не логично для меня. По моему мнению, первый шаблон должен вести себя аналогично методу «Содержит» класса строкости. И я думаю, что это так в первом.

Подробнее здесь: https://stackoverflow.com/questions/100 ... ing-of-lin

Вернуться в «JAVA»