#regex #intellij-idea
#регулярное выражение #intellij-idea
Вопрос:
Я не понимаю, почему мой шаблон соответствует определенным строкам в поиске / замене IntelliJ.
Я собираю подборку шаблонов регулярных выражений, полезных для поиска / замены определенных стандартов кодирования, таких как переключение нулевых проверок на наличие null в левой части. В этом случае я пытаюсь настроить конвертер isEmpty, который распознает сравнения .size или .length с 0, как в if(foo.size() == 0)
или if(zig.zag().length == 0)
Однако мой шаблон
((?:w (?)?.) )blength(?)?|bsize() ?== ?0
соответствует foo.length
как в
for(int i=0; i<foo.length; i )
Я бы хотел, чтобы этот шаблон соответствовал проверкам пустой строки / коллекции, таким как foo.length == 0
или bar.size() == 0
, чтобы преобразовать их для использования isEmpty() (т. Е. foo.isEmpty()
). Но не для соответствия другим случаям, таким как приведенный выше. Я также хотел бы, чтобы это РЕГУЛЯРНОЕ выражение было полезно как для проверки пустой строки , так и для проверки пустой коллекции.
Комментарии:
1. У строк Java нет
size()
метода, но у коллекций есть. Пожалуйста, очистите свой вопрос и проясните, какой именно код вы пытаетесь найти и заменить.2. Я оставил его расплывчатым, потому что хотел, чтобы регулярное выражение соответствовало как пустой строке , так и проверкам пустой коллекции.
3. Это не очень хорошо подойдет для вашего вопроса. Пожалуйста, сузьте круг поиска.
4. Вы использовали обратную косую черту перед пробелом, следующим за
==
, я не знаю, как это будет себя вести, но в этом нет необходимости.5. @TimBiegeleisen Я отредактировал вопрос в соответствии с вашим советом; теперь это более понятно?
Ответ №1:
|
Оператор имеет очень низкий приоритет, вы должны заключить его в круглые скобки length|size()
:
(w*.) b(length|size()) ?== ?0
Комментарии:
1.
|
Оператор в данном случае является чередованием регулярных выражений (ИЛИ), не логическое ИЛИ. Таким образом, приоритет здесь не означает то же самое.2. да, но выражение, которое у него есть, ищет либо что-то вроде
foo.length
, либо что-то вродеsize() == 0
3. @TallChuck Я обновил шаблон регулярных выражений в исходном вопросе, чтобы он был ближе к окончательному шаблону, сохранив при этом первоначальную проблему; вы, вероятно, захотите соответствующим образом обновить свой ответ.
4. Я рад оставить все как есть, оно передает суть без слишком большого количества дополнительных символов