Регулярное выражение для проверки четного числа предыдущих символов - PullRequest
0 голосов
/ 18 мая 2019

Мне нужно было убедиться, что строка не заканчивается \', поэтому использовал отрицательный взгляд:

\\:'(.+)(?<!\\\\)'

Однако, это может закончиться \\'. По сути, он может заканчиваться на ' или ', которому предшествует четное число обратных косых черт \.

Он реализован на Java.

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

Единственный способ

(?<!\\)(?:\\\\)*'$

Объяснено

 (?<! \\ )          # Not an escape behind us, forces only even escapes ahead
 (?: \\ \\ )*       # Any amount of even escapes
 '                  # Quote 
 $                  # EOS

Примечания. Это факт, что даже побегам ничего не удается избежать, так чтовпереди могут быть даже побеги, используется отрицательный взгляд (?<!\\).

0 голосов
/ 18 мая 2019

Напишите это как регулярное выражение, чтобы найти то, что вам не нужно, затем включите это регулярное выражение в отрицательный прогноз нулевой ширины.Приведенное ниже описание использует xxx для обозначения регулярного выражения, построенного до этой точки.

В конце вы хотите найти \': \\'$

Вы хотите включить четное число \ до этого.(?:\\\\)*xxx

Вы не хотите \ до этого: (?<!\\)xxx

Все, что до этого разрешено: .*xxx

Вставить в негативном видезатем сопоставьте что угодно: ^(?!xxx).*$

Убедитесь, что . соответствует разрывам строк (необязательно): (?s)xxx

Все вместе: (?s)^(?!.*(?<!\\)(?:\\\\)*\\'$).*$

Как литерал Java: "(?s)^(?!.*(?<!\\\\)(?:\\\\\\\\)*\\\\'$).*$"

Демонстрация на regex101.com показывает, что строки, заканчивающиеся нечетным числом \ перед окончательным ', не выбраны, т.е. недействительны.

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