Wyrażenia regularne, jak dopasować jako prawdziwe, jeśli coś NIE istnieje?


0

Jestem dość przyzwoity w stosunku do wyrażeń regularnych, ale jest jedna sytuacja, która zawsze mnie zmaga, a mianowicie: Podaj dopasowanie, gdy wzorzec nie istnieje w ciągu wyszukiwania.

Oto kilka podstawowych informacji:

Używam programu o nazwie Actual Tools Window Manager, który pozwala tworzyć reguły na podstawie poszczególnych okien. Mogę określić tytuł systemu Windows jako dokładny ciąg lub użyć wyrażenia regularnego, aby dopasować.

Moim celem jest uruchomienie tej reguły w dowolnym oknie, które ma tytuł, który nie zawiera określonego ciągu. Wyrażenie regularne jest tylko jednym wzorcem, podobnym do funkcji php: preg_match.

Nie mogę pracować z grupami przechwytywania i odwoływać się do grupy przechwytywania (przynajmniej nie udało mi się tego uruchomić).

Jako przykład, powiedzmy, że chcę utworzyć regułę, która odpala wszystko, z wyjątkiem sytuacji, gdy cmd.exe jest w tytule.

Otwieram wiersz polecenia, więc prawdopodobnie tytuł będzie: C:\Windows\System32\cmd.exe Chcę, aby to okno zostało wykluczone z mojej reguły na podstawie obecności cmd.exe

Próbowałem takich rzeczy ^cmd.exe ale to po prostu nie działa.

Rzeczywiste narzędzia używają biblioteki wyrażeń regularnych zgodnych z Perlem, więc http://www.pcre.org/ wszystko powinno być możliwe.

Jak mogę utworzyć wyrażenie regularne, które pasuje do OK, jeśli nie ma określonego ciągu, ale FAIL, jeśli ten ciąg jest obecny?

Odpowiedzi:


1

Ten regex spełnia swoją rolę:

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

Wyjaśnienie:

^               : 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

Przykłady:

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.