Regex - Tidak mengandung Karakter tertentu

274

Saya perlu regex untuk mencocokkan jika di mana saja dalam kalimat TIDAK ada <atau>.

Jika <atau> ada di string maka itu harus mengembalikan false

Saya memiliki sebagian keberhasilan dengan ini tetapi hanya jika <saya berada di awal atau akhir:

(?!<|>).*$

Saya menggunakan .Net jika itu membuat perbedaan.

Terima kasih untuk bantuannya.

SetiSeeker
sumber

Jawaban:

436
^[^<>]+$

Tanda sisipan di kelas karakter ( [^) berarti cocok dengan apa pun tetapi, jadi ini berarti, awal string, lalu satu atau lebih dari apa pun kecuali <dan >, kemudian akhir string.

Ned Batchelder
sumber
3
Apa arti tanda kuret pertama? Apakah ini berarti tidak ada sesuatu yang tidak mengandung karakter-karakter itu ... dengan demikian berarti hanya string yang mengandung karakter-karakter itu?
RobKohr
11
Tanda sisir pertama berarti, awal dari string. Dolar berarti, akhir dari string.
Ned Batchelder
2
@ PhilipRego Hati-hati dengan karakter khusus: shell menafsirkan beberapa dari mereka. Lihat untuk melihat apakah Anda sekarang memiliki file bernama '] + $' di direktori Anda. Masukkan seluruh regex ke dalam tanda kutip tunggal untuk membuatnya bekerja.
Ned Batchelder
Jawaban bagus! Bisakah Anda menambahkan penjelasan mengapa ada +dan tanda sisipan pertama?
Dr_Zaszuś
1
@ Dr_Zaszuś "+" berarti "satu atau lebih", dan "^" berarti "awal dari string".
Ned Batchelder
59

Ini dia:

^[^<>]*$

Ini akan menguji string yang tidak <dan tidak>

Jika Anda ingin menguji untuk string yang mungkin <dan >, tetapi juga harus memiliki sesuatu yang lain, Anda harus menggunakan saja

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

Dimana [<>]artinya salah <atau> dan [^<>]berarti apa saja yang bukan dari <atau> .

Dan tentu saja tautan wajib .

Alin Purcaru
sumber