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