regex untuk mencocokkan sesuatu jika tidak didahului oleh sesuatu yang lain


165

Jadi dengan regex di java, saya ingin menulis regex yang akan cocok jika dan hanya jika polanya tidak didahului oleh karakter tertentu. Sebagai contoh:

String s = "foobar barbar beachbar crowbar bar ";

Saya ingin mencocokkan jika bar tidak didahului oleh foo. Jadi outputnya adalah:

barbar
beachbar
crowbar
bar

Saya tahu ini mungkin pertanyaan yang sangat sederhana. Saya mencoba belajar regex, tetapi sementara itu saya perlu sesuatu untuk bekerja sekarang.

Jawaban:


278

Anda ingin menggunakan negative lookbehindseperti ini:

\w*(?<!foo)bar

Di mana (?<!x)berarti "hanya jika tidak memiliki" x "sebelum titik ini".

Lihat Ekspresi Reguler - Lookaround untuk informasi lebih lanjut.

Sunting : menambahkan \w*untuk menangkap karakter sebelumnya (mis. "Pantai").


2
modifikasi apa yang perlu dilakukan agar tidak cocok dengan foo_arbitrary_bar? yaitu foo tidak segera mendahului bar
Brad Kent

1
@BradKent (?<!foo).*barakan cocok dengan sesuatu seperti itu, saya percaya.
emyller

@emyller nggak. yang akan cocok dengan foobazbar (foo tidak datang sebelum foobazbar, jadi itu cocok)
Brad Kent

2
@BradKent Saya tidak membaca "tidak" di "tidak cocok", itu sebabnya saya mengatakan itu akan cocok. Kasing Anda terlihat seperti \b(?!foo)\w*bar\bbagi saya kemudian.
emyller

4
@BradKent Kemudian Anda dapat mengajukan pertanyaan baru, menguraikan apa yang ingin Anda capai secara terperinci, atau terus bermain dengan ekspresi reguler hingga Anda menemukannya sendiri. :)
emyller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.