Почему это регулярное выражение не соответствует? - PullRequest
1 голос
/ 06 июля 2011

Я не могу выяснить, почему мое регулярное выражение не соответствует строке при использовании метода Java String.matches - оно совпадает с использованием в онлайн-тестере регулярных выражений.

Вот код Java:

line.trim().replaceAll(" +", " ").matches("(const )?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]");

и строка, которая должна соответствовать:

bool fLoad)   // somecomment

У кого-нибудь есть идеи, почему это так?

Ответы [ 3 ]

4 голосов
/ 06 июля 2011

matches() означает, что он должен соответствовать полностью , то есть вся строка соответствует RE.Ваш RE не разрешает ничего после ')'.Попробуйте использовать find() вместо matches().

1 голос
/ 06 июля 2011

Похоже, что вы пытаетесь сопоставить какое-то объявление переменной в исходном коде.

В вашем регулярном выражении вы видите это после части, которая, как мне кажется, должна соответствовать "const (необязательно) типу данных":

"(const )?[a-zA-Z0-9\\*]*\\ "

Является ли \\ преднамеренным?Вы имеете в виду, чтобы соответствовать один \?

1 голос
/ 06 июля 2011

Java String.match() не работает так, как это делают многие другие языки: целый вход должен соответствовать, поэтому добавьте .* к каждому концу регулярного выражения:

line.trim().replaceAll(" +", " ").matches(".*(const )?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)].*");

Я проверял это, и ваша строка выборки возвращает true из matches()

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