Başında başka bir şey yoksa bir şeyi eşleştirmek için normal ifade


166

Java'daki regex ile, sadece desen belirli karakterlerden önce gelmiyorsa eşleşecek bir regex yazmak istiyorum. Örneğin:

String s = "foobar barbar beachbar crowbar bar ";

Çubuğun önünde foo yoksa eşleşmek istiyorum. Yani çıktı:

barbar
beachbar
crowbar
bar

Bunun muhtemelen çok basit bir soru olduğunu biliyorum. Normal ifadeyi öğrenmeye çalışıyorum, ama bu arada çalışmak için bir şeye ihtiyacım var.

Yanıtlar:


279

Bunun negative lookbehindgibi kullanmak istiyorsunuz :

\w*(?<!foo)bar

Burada (?<!x)"yalnızca bu noktadan önce" x "yoksa" anlamına gelir.

Daha fazla bilgi için bkz. Normal İfadeler - Konum .

Düzenle : \w*karakterleri daha önce yakalamak için eklendi (örneğin "plaj").


2
foo_arbitrary_bar ile eşleşmemesi için hangi değişikliklerin yapılması gerekir? yani foo bardan hemen önce değil
Brad Kent

1
@BradKent (?<!foo).*barböyle bir şeyle eşleşir, inanıyorum.
emyller

@ emyller hayır. bu foobazbar ile eşleşecek (foo foobazbar'dan önce gelmiyor, bu yüzden eşleşecek)
Brad Kent

2
@BradKent Ben "eşleşmedi" in "değil" okumadım, bu yüzden maç olacağını söyledi. \b(?!foo)\w*bar\bO zaman bana bir dava benziyor .
emyller

4
@BradKent Yeni bir soru sorabilir, ne elde etmeye çalıştığınızı ayrıntılı bir şekilde açıklayabilir veya kendiniz bulana kadar düzenli ifadelerle oynamaya devam edebilirsiniz. :)
emyller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.