/ / Zastaviť na slove v regex - c #, regex

Zastaviť slovo v regex - c #, regex

Viem, že môžem urobiť nasledujúce [^ h] dostať všetky zápasy prijať tie s "h". Ako by som to urobil s celým slovom, ako ^ (slovo)

odpovede:

9 pre odpoveď č. 1

Ak chcete, aby reťazec zodpovedal nie je totožné s foo:

^(?!foo).*$

Ak chcete, aby reťazec zodpovedal neobsahuje foo:

^(?!.*foo).*$

Ak chcete priradiť reťazec, ktorý neobsahuje foo ako úplné slovo:

^(?!.*bfoob).*$

Ak chcete priradiť reťazec kým foo objavia a skôr zastavte zápas foo:

^(?:(?!foo).)*

Tieto riešenia nespracujú nové riadky v reťazci, takže možno budete musieť nastaviť zodpovedajúce možnosti regexu RegexOptions.Singleline .NET, ak je to problém.

(?!foo) je a výraz nulovej šírky spätného vyhľadávania, čo znamená, že to nie je možné ("negatívne"), aby sa zhodovalo foo nasledujúcu aktuálnu pozíciu v reťazci ("vzhľad." vpred"), pričom nespotrebováva žiadne znaky v pokuse o zápas (" nula-šírka ").


3 pre odpoveď č. 2

Neexistuje naozaj dobrý spôsob, ako to urobiť s regulárnymi výrazmi. Najbližšie, čo môžete získať, je použiť negatívny vzhľad ktorý nájde regulárny výraz iba ak nie je nasledovaný reťazcom v zápornom spätnom hlave…:

foo(?!word)

Nájde len foo nenasleduje word.

To isté platí pre pozeranie pozadu (namiesto toho dopredu):

(?<!word)foo

Nájde len foo ak tomu tak nie je word.