Регулярное выражение для несовпадающих подстрок - PullRequest
1 голос
/ 07 декабря 2011

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

protected String methodName(String args[]) {

    final String METHOD = "wrongMethodName";
    ...

}

И следующий блок кода I не хочу сопоставить

protected String methodName(String args[]) {

    final String METHOD = "methodName";
    ...

}

Прямо сейчас у меня есть следующее (не работающее) регулярное выражение, для которого требуется включение DOTALL:

(\w+?)\(.*?\) ?{.*?METHOD *= *".*?";

Если я попытаюсь сделать отрицательный взгляд сзади с группой захвата, регулярное выражение не скомпилируется, потому что размер взгляда позади неизвестен ранее.

java.util.regex.PatternSyntaxException:
    Look-behind group does not have an obvious maximum length near index 39

Есть ли способ использовать группу захвата в этом регулярном выражении, чтобы сказать, что я хочу сопоставить строки, которые не соответствуют группе захвата?

1 Ответ

2 голосов
/ 07 декабря 2011

Я думаю, что вместо этого вы можете использовать отрицательный прогноз (если я правильно понял вашу проблему), попробуйте:

(\b\w+?\b)\(.*?\) ?{.*?METHOD *= *"(?!\1).*?"

См. здесь на Regexr

Я также использовал границы слов в первой группе, иначе он просто начинает совпадать со второй буквы.

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