Предположим, у меня есть строка:
String str = "some strange string with searched symbol";
И я хочу найти в нем некоторые символы, предположим, что это будет "string"
. Итак, у нас есть следующее:
str.matches("string"); //false
str.matches(".*string.*"); //true
Итак, как указано в заголовке, почему я должен указать целую строку в регулярном выражении Java?
Документация Java говорит:
public boolean matches (регулярное выражение строки)
Сообщает, соответствует ли эта строка данному регулярному выражению.
Он не говорит
Сообщает, соответствует ли эта строка целой данному регулярному выражению.
Например, в php
это будет:
$str = "some strange string with searched symbol";
var_dump(preg_match('/string/', $str)); // int(1)
var_dump(preg_match('/.*string.*/', $str)); //int(1)
Итак, оба регулярных выражения будут true
.
И я думаю, что это правильно, потому что, если я хочу протестировать целую строку, я бы сделал str.matches("^string$");
PS: Да, я знаю, что это поиск подстроки , проще и быстрее будет использовать str.indexOf("string")
или str.contains("string")
. Мой вопрос касается только регулярного выражения Java.
ОБНОВЛЕНИЕ. Как указано в @ChrisJester-Young (и @GyroGearless), одно из решений, если вы хотите найти regex
, который является частью строки темы, заключается в использовании find()
метод, подобный этому:
String str = "some strange string with searched symbol";
Matcher m = Pattern.compile("string").matcher(str);
System.out.println(m.find()); //true