Apakah ada operator NOT di Regexes? Seperti di string itu:"(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"
Saya ingin menghapus semua \([0-9a-zA-z _\.\-:]*\)
tapi tidak satu di mana itu adalah satu tahun: (2001)
.
Jadi apa regex harus kembali harus: (2001) name
.
CATATAN: sesuatu seperti \((?![\d]){4}[0-9a-zA-z _\.\-:]*\)
tidak bekerja untuk saya ( (20019)
entah bagaimana juga cocok ...)
(2001) name
.Jawaban:
Tidak, tidak ada operator langsung. Setidaknya bukan seperti yang Anda harapkan.
Anda dapat menggunakan tampilan negatif dengan lebar nol, namun:
Bagian itu
(?!...)
berarti "hanya cocok jika teks berikut (karenanya: lookahead) ini tidak (maka: negatif) cocok dengan ini. Tapi itu tidak benar-benar mengkonsumsi karakter yang cocok (karenanya: lebar-nol).Sebenarnya ada 4 kombinasi lookarounds dengan 2 sumbu:
sumber
\((?![\d]{4})[0-9a-zA-z _\.\-:]+\)
masih ada(20019)
di dalamnya{4}
luar lookahead dan dalam komentar ini Anda meletakkannya di dalam : mana yang Anda coba? Juga: jika Anda ingin(20019)
mencocokkan, maka Anda harus menambahkan bagian\)
dalam lookahead Anda:\((?![\d]{4}\))[0-9a-zA-z _\.\-:]+\)
\((?![\d]{4} -->\)<--)[0-9a-zA-z _\.\-:]+\)
Lalu ada braket tidak tertutup, bukan?)
karena saya ingin mencocokkan karakter literal)
(seperti yang Anda lakukan di awal dan akhir ekspresi reguler!). Kemudian setelah saya mencocokkan itu, saya mengakhiri lookahead dengan menggunakan unescaped)
.Kurang tepat, meskipun secara umum Anda biasanya dapat menggunakan beberapa solusi untuk salah satu formulir
[^abc]
, yang karakter demi karakter bukana
ataub
atauc
,a(?!b)
yanga
tidak diikuti olehb
(?<!a)b
yangb
tidak didahului oleha
sumber
[^abc]
seharusnya berarti bukana
ataub
atauc
, bukan "bukan stringabc
".