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.

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.


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 .

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.