Почему этот REGEX соответствует этому шаблону? - PullRequest
0 голосов
/ 27 марта 2019

Я не понимаю, почему мой шаблон соответствует определенным строкам в поиске / замене IntelliJ.

Я собираю подборку шаблонов REGEX, полезных для поиска / замены определенных стандартов кодирования, таких как переключение нулевых проверок, чтобы иметь нулевое значение на левой стороне. В этом случае я пытаюсь настроить конвертер 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()). Но не для соответствия другим случаям, таким как случай выше. Я также хотел бы, чтобы этот REGEX был полезен как для пустой строки , так и для проверки пустой коллекции.

1 Ответ

0 голосов
/ 27 марта 2019

Оператор | имеет очень низкий приоритет, вы должны ставить скобки вокруг length|size\(\):

(\w*\.)+\b(length|size\(\)) ?== ?0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...