Я попробовал это регулярное выражение ^([^i]|i(?!s OK))+\.$
в двух строках ниже.
1. /tmp/tmp.oW75zGUh4S ... is O.
2. /tmp/tmp.oW75zGUh4S ... is OK.
Я ожидаю, что это регулярное выражение будет соответствовать первому, но не второму. Тем не менее, это не соответствует ни одному. Почему?
Если я использую положительный прогноз ^([^i]|i(?=s OK))+\.$
, то он соответствует второму, но не первому, и это ожидаемое поведение.
^.*(?<!is OK.)$
, по крайней мере, я думаю, что это более читабельно и, кроме того, проще на обратных трассах. - person Wrikken   schedule 06.04.2016sdskjfskdfj is OK dkfjslkdfjlks
- person Dominique Fortin   schedule 06.04.2016^(.(?!is OK\.$))+$
; - person Wrikken   schedule 06.04.2016^((?!is OK\.$).)+$
. Чтобы понять, почему, попробуйте сопоставить строку, состоящую только изis OK.
, что должно привести к ошибке. Ваше регулярное выражение соответствует ему, потому что оно потребляетi
до того, как его увидит просмотр вперед. Кроме того, ваше рекурсивное выражение не сработало, потому что вы забыли добавить флагg
. Ни одно из ваших регулярных выражений даже не пыталось сопоставить что-либо после первой строки. - person Alan Moore   schedule 29.04.2016