Saya membutuhkan regex yang akan cocok blahfooblah
tetapi tidakblahfoobarblah
Saya ingin itu hanya cocok dengan foo dan segala sesuatu di sekitar foo, selama tidak diikuti oleh bar.
Saya mencoba menggunakan ini: foo.*(?<!bar)
yang cukup dekat, tetapi cocok blahfoobarblah
. Tampilan negatif di belakang harus cocok dengan apa pun dan bukan hanya bilah.
Bahasa spesifik yang saya gunakan adalah Clojure yang menggunakan regex Java di bawah tenda.
EDIT: Lebih khusus lagi, saya juga membutuhkannya untuk lulus blahfooblahfoobarblah
tetapi tidak blahfoobarblahblah
.
Jawaban:
Mencoba:
Tes:
Penjelasan ekspresi reguler
Regex lainnya
Jika Anda hanya ingin mengecualikan
bar
tepat setelahnyafoo
, Anda dapat menggunakanSunting
Anda memperbarui pertanyaan Anda untuk membuatnya spesifik.
Tes baru
Penjelasan baru
(?=.*foo(?!bar))
memastikan afoo
ditemukan tetapi tidak diikuti secara langsungbar
sumber
foo
tetapi tidakfoobar
. Untuk mencocokkanbot
tetapi tidakbotters
, Anda akan menggunakan/(?=.*bot(?!ters))^(\w+)$/
.Untuk mencocokkan
foo
pengikut dengan sesuatu yang tidak dimulai denganbar
, cobaVersi Anda dengan tampilan negatif secara efektif adalah "cocokkan
foo
diikuti dengan sesuatu yang tidak diakhiribar
". The.*
pertandingan semuabarblah
, dan(?<!bar)
terlihat kembali dilah
dan cek yang tidak cocokbar
, yang tidak, sehingga pertandingan pola keseluruhan.sumber
Gunakan pandangan negatif ke depan sebagai gantinya:
Ini berhasil untuk saya, semoga membantu. Semoga berhasil!
sumber
Anda menulis komentar yang menyarankan Anda seperti ini untuk mencocokkan semua kata dalam sebuah string, bukan seluruh string itu sendiri.
Daripada menumbuk semua ini dalam komentar, saya mempostingnya sebagai jawaban baru.
Regex Baru
Contoh teks
Cocok
sumber
Permintaan kecocokan spesifik Anda dapat dicocokkan dengan:
Ini akan cocok
blahfooblahfoobarblah
tapi tidakblahfoobarblahblah
.Masalah dengan ekspresi reguler Anda
foo.*(?<!bar)
adalah.*
setelahnyafoo
. Itu cocok dengan banyak karakter apa pun termasuk karakter setelahnyabar
.sumber