Как ограничить отрицательное (совместимое с Emacs) регулярное выражение с отрицанной строкой - PullRequest
2 голосов
/ 07 июня 2019

Я ищу регулярное выражение, которое не соответствует "CVS". Я не хочу использовать какую-либо функцию, которая не может быть переведена в регулярное выражение Emacs.

Пока что у меня есть (в синтаксисе Python, потому что я хочу показать его на regex101.com):

(^[^C].*|^.[^V].*|^..[^S].*)

Это регулярное выражение не соответствует "CVS" - пока все хорошо. К сожалению, не также соответствует "CVS and more", но оно должно соответствовать.

Как я могу настроить свое регулярное выражение, чтобы оно соответствовало "CVS and anything after it", но все еще не совпадало с "CVS"? (Т.е. как я могу сделать последний тест на странице regex101.com успешно?)

1 Ответ

1 голос
/ 07 июня 2019

Насколько я понимаю, вы хотите сопоставить каждую отдельную строку, которая не является строкой:

CVS

Вы не слишком далеко от вашей попытки.

Здесь регулярное выражение в синтаксисе Python на regex101.com:

^(?:[^C\n]|C[^V\n]|CV[^S\n]|CVS.).*|^CV?$

И вот регулярное выражение elisp в синтаксисе чтения для строк:

"^\\(?:[^C\n]\\|C[^V\n]\\|CV[^S\n]\\|CVS.\\).*\\|^CV?$"

Обратите внимание на новые строки. Таким образом, в строковом синтаксисе это становится:

^\(?:[^C
]\|C[^V
]\|CV[^S
]\|CVS.\).*\|^CV?$

n.b. Вы можете использовать M-x re-builder для проверки их в Emacs.

...