Regex - nie zawiera niektórych znaków

274

Potrzebuję wyrażenia regularnego w celu dopasowania, jeśli gdziekolwiek w zdaniu NIE ma <lub>.

Jeśli w ciągu znajduje się <lub>, musi zwrócić false.

Miałem częściowy sukces z tym, ale tylko wtedy, gdy moje <> są na początku lub na końcu:

(?!<|>).*$

Używam .Net, jeśli to robi różnicę.

Dzięki za pomoc.

SetiSeeker
źródło

Odpowiedzi:

436
^[^<>]+$

Daszek w klasie znaków ( [^) oznacza nic ale mecz, więc oznacza to, począwszy od łańcucha, wówczas jeden lub większa od wszystkiego z wyjątkiem <a >, a następnie koniec napisu.

Ned Batchelder
źródło
3
Co oznacza pierwsza karetka? Czy nie oznaczałoby to niczego, co nie zawiera tych znaków ... a zatem oznacza tylko ciągi znaków, które zawierają te znaki?
RobKohr
11
Pierwsza karetka oznacza początek sznurka. Dolar oznacza koniec łańcucha.
Ned Batchelder,
2
@PhilipRego Uważaj na znaki specjalne: powłoka interpretuje niektóre z nich. Sprawdź, czy masz teraz w katalogu plik o nazwie „] + $”. Umieść całe wyrażenie regularne w pojedynczych cudzysłowach, aby działało.
Ned Batchelder,
Świetna odpowiedź! Czy możesz dodać wyjaśnienie, dlaczego istnieje +i pierwsza karetka?
Dr_Zaszuś
1
@ Dr_Zaszuś „+” oznacza „jeden lub więcej”, a „^” oznacza „początek ciągu”.
Ned Batchelder
59

Proszę bardzo:

^[^<>]*$

Spowoduje to sprawdzenie łańcucha, który nie ma <i nie>

Jeśli chcesz przetestować ciąg znaków, który może mieć <i >, ale musi także mieć coś innego, powinieneś użyć właśnie tego

[^<>] (or ^.*[^<>].*$)

Gdzie [<>]oznacza którykolwiek <lub> i [^<>]oznacza dowolny, który nie jest z <lub> .

I oczywiście obowiązkowy link .

Alin Purcaru
źródło