Я вполне приличен с регулярными выражениями, но есть одна ситуация, которая всегда меня беспокоит, а именно: дать совпадение, когда шаблон не существует в строке поиска.

Вот немного справочной информации:

Я использую программу Actual Tools Window Manager, и она позволяет создавать правила на основе отдельных окон. Я могу либо указать заголовок окна как точную строку, либо использовать регулярное выражение для сопоставления.

Моя цель - заставить это правило сработать в любом окне с заголовком, который не содержит конкретной строки. Регулярное выражение - это всего лишь один шаблон, похожий на функцию php: preg_match.

Я не могу работать с группами захвата и ссылаться на группу захвата (по крайней мере, я не получил это работать).

В качестве примера, скажем, я хочу создать правило, которое запускается во всем, кроме случаев, когда cmd.exe находится в заголовке.

Я открываю командную строку, поэтому, вероятно, ее заголовок будет иметь вид: C:\Windows\System32\cmd.exe Я хочу, чтобы это окно было исключено из моего правила на основе наличия cmd.exe.

Я пробовал что-то вроде ^cmd.exe но это просто не работает.

В Actual Tools используется библиотека регулярных выражений, совместимая с Perl, поэтому http://www.pcre.org/ должно быть как-то возможно.

Как я могу сделать регулярное выражение, которое соответствует OK, если определенная строка отсутствует, но FAIL, если эта строка присутствует?

1 ответ1

1

Это регулярное выражение делает работу:

^(?:(?!cmd\.exe).)*$

Объяснение:

^               : begining of string
  (?:           : start non capture group
    (?!         : start negative lookahead
      cmd\.exe  : literally (you may add wordboundaries \bcmd\.exe\b if you don't want to match mycmd.exe)
    )           : end lookahead
    .           : 1 any character but newline
  )*            : end group, repeated 0 or more times
$               end of string

Примеры:

C:\Windows\System32\cmd.exe         --> Doesn't match
C:\Windows\System32\mycmd.exe       --> Doesn't match without wordboundaries, else Match
C:\Windows\System32\cmd             --> Match
C:\Windows\System32\exe             --> Match

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .