Глупый вопрос RegEx. Что я делаю неправильно?

1
String url = "hello world";

String p = "world";
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(url);
if (matcher.matches()) {
    int start = matcher.start();
    int end = matcher.end();
}

Что я делаю не так? Каким образом утверждение if никогда не попадает?

Теги:

5 ответов

4
Лучший ответ

Метод matches() пытается сопоставить всю строку с шаблоном. Вам нужен метод find().

  • 0
    Или "String p =" * world * ";
  • 0
    Ты прав. Спасибо. Я читаю документы по Matcher, и мне до сих пор не ясно о различиях между match () и find (). Не могли бы вы разработать некоторые?
Показать ещё 2 комментария
1

Вам нужно использовать find потому что,

match пытается сопоставить patten с всей строкой и неявно добавить a ^ в начале и $ в конце вашего шаблона.

Таким образом, ваш шаблон эквивалентен "^ миру $".

  • 0
    ах ... это имеет смысл ... и глупо. Если бы я хотел этого, я бы добавил это. Urgh. Огромное спасибо!
  • 0
    Ааа .. Это нормально.
1

Попробуйте Matcher.find(). Matcher.matches() проверяет соответствие всей строки шаблону.

0

Попробуйте изменить свой шаблон на ".*world.*":

String p = ".*world.*";

Таким образом, он будет соответствовать любой строке, содержащей "мир".

-1

У меня возникла такая же проблема. Я не знаю причины. Если кто-то знает проблему, напишите здесь. Я решил проблему с использованием find() несколько раз вместо match().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню