Проблема Java RegExp -. * (Www). * Vs. (www) - PullRequest
1 голос
/ 09 марта 2009

Мой приятель в настоящее время возится с JpCap в Java, и мы обнаружили некоторую интересную (может быть?) Проблему с регулярными выражениями в Java.

Только HTTP-трафик захватывается и впоследствии анализируется. Для этого он использует такой шаблон:

Pattern p = Pattern.compile("(www)");

Но то, что мы оба не смогли выяснить: почему приведенный выше шаблон не дает вообще никаких совпадений, тогда как следующее:

Pattern p = Pattern.compile(".*(www).*");

Что я вижу, оба они должны быть идентичными, не так ли? У меня нет такого большого опыта работы с регулярными выражениями, поэтому на этот вопрос может быть очень простой ответ:)

Ответы [ 4 ]

7 голосов
/ 09 марта 2009

Ваш первый шаблон принимает только строку «www».

Второй шаблон принимает любую строку с 'www' в любом месте.

Этот веб-сайт содержит больше информации о Java regex.

5 голосов
/ 09 марта 2009

О, неважно, я только что узнал, что мы оба немного API-слепы;)

Мы использовали

Matcher.matches()

, который соответствует шаблону против всей строки вместо

Matcher.find()

, который пытается найти шаблон в любом месте данной строки.

Спасибо за ответы, хотя! :)

1 голос
/ 09 марта 2009

Я предполагаю, что вы используете метод matches(), поэтому регулярные выражения в этом случае применяются к строкам. Это означает, что любое регулярное выражение имеет символы начала и конца строки, добавленные «под капот».

Таким образом, вместо получения "(www)" вы фактически получаете "^(www)$", и, как вы видели, это значительно меняет значение регулярного выражения.

Для получения дополнительной информации об этом нюансе Java: http://www.regular -expressions.info / java.html

0 голосов
/ 09 марта 2009

Регулярным выражениям нужны разделители.

Знак «просто» используется для объявления строки и поэтому недопустим в качестве разделителя.

Ваш второй пример имеет разделители, поэтому он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...