Chcę dopasować dowolny ciąg, który ma nie zawierają ciąg "DontMatchThis".C# Regex, aby dopasować ciąg znaków, który nie zawiera określonego ciągu?
Co to jest wyrażenie regularne?
Chcę dopasować dowolny ciąg, który ma nie zawierają ciąg "DontMatchThis".C# Regex, aby dopasować ciąg znaków, który nie zawiera określonego ciągu?
Co to jest wyrażenie regularne?
spróbuj tego:
^(?!.*DontMatchThis).*$
Proszę podać jakieś wyjaśnienie. Jak to działa? – bikashg
@bikashg: patrz tutaj: http://stackoverflow.com/a/11125488/47190 –
regex pasujące ciąg znaków, który nie zawiera pewien wzór
(?s)^(?!.*DontMatchThis).*$
Jeśli używasz wzór bez (?s)
(który jest wersja Inline flaga, która powoduje, że .
pasuje do znaku nowej linii LF, jak również wszystkich innych znaków), zostanie wyszukana tylko w pierwszym wierszu, a tylko ciąg bez symboli LF zostanie dopasowany do .*
.
Wzór Szczegóły:
(?s)
- dotall/SingleLine modyfikator co .
dowolny znak^
- start kotwicy strun(?!.*DontMatchThis)
- negative lookahead sprawdzenie, czy istnieją jakiekolwiek 0 lub więcej znaków (pasuje do chciwego .*
subpattern - UWAGA leniweWersja 0 (pasująca jak najmniej znaków przed kolejnym dopasowaniem podrzędnym) może przyspieszyć wykonanie zadania, jeśli oczekuje się, że DontMatchThis
jest bliżej początku ciągu znaków), a następnie DontMatchThis
.*
- dowolne zero lub więcej znaków, o ile to możliwe, do$
- koniec ciągu znaków (zob. Znaki zakotwiczenia: Dollar ($
)).To jest dobry dodatek do zaakceptowanej odpowiedzi. – VMAtm
Dlaczego chcesz to zrobić z regex i nie używać String.IndexOf? –
Ponieważ czasami twoje wyrażenie regularne jest w config i nie możesz zmienić kodu. Lub dlatego, że potrzebujesz go jako podwyrażenie innego, bardziej złożonego wyrażenia regularnego. Lub z jednego z wielu powodów. Równie dobrze możesz zapytać: "Dlaczego nie nakarmisz swojego kota tekstem do ciebie za pośrednictwem tańca interpretacyjnego?". Czasami po prostu nie masz kota do ręki. –