2012-03-15 24 views
5

Aşağıdaki Regexp'i var.Java RegExp grubu olumsuzlaması mümkün mü? <code>[^1]</code> illeagal çünkü <code>(["'])(\1|[^1])+1</code></p> <p>Açıkçası derlenmiş edilemedi:

Eşleşen grubu olumsuzlamak mümkün mü?

+1

, eşleştirmeye çalıştığınız metin nedir? Regex'in biraz kafa karıştırıcı. – beerbajay

+0

Soru şu, diğer tatlarda/dillerde mümkün mü? Böyle bir yapının, bir yakalama grubunun birden fazla karakter içerebileceğinin bir anlamı olmadığını düşünebilirim, bu yüzden [^ \ 1] 'bu karakterlerin bir listesi olurdu ... ama bu sadece benim düşüncem. Aynı zamanda regex motorunun önceden bilmesi gereken * karakterleri bilmesi de olabilir. [\ 1] çalışıyor mu? –

+0

Bunu yalnızca ['regular-expression.info'] 'da bulduğum (http://www.regular-expressions.info/brackets.html): *" Referanslar ayrıca bir karakter sınıfında kullanılamaz. "\ 1' (a) [\ 1b] gibi regex cinsinden ifadeler çoğu regex çeşidinde sekizli bir kaçış olarak yorumlanacaktır.Bu nedenle bu regex bir 'a' ile eşleşecek, ardından' \ x01' veya 'b' ile eşleşecektir. Düzenli ifadeler hakkında daha fazla bilgi sahibi olmak istiyorum, [* Jeffrey Friedl tarafından Mastering Düzenli İfadeler *] (http://shop.oreilly.com/product/9780596528126.do). –

cevap

4

Olumlu veya olumsuz karakter sınıflarında geri başvuruları kullanamazsınız.

Ama kullanarak istediğini elde edebilirsiniz negatif lookahead assertions:

(["'])(?:\\.|(?!\1).)*\1 

Açıklama:

(["']) # Match and remember a quote. 
(?:  # Either match... 
\\.  # an escaped character 
|   # or 
(?!\1) # (unless that character is identical to the quote character in \1) 
.  # any character 
)*  # any number of times. 
\1  # Match the corresponding quote. 
+0

Diğer soru üzerine, bunun işe yaramayacağını söylediniz. '(["']) (\\\ 1 |.) +? \ 1'? Ya da soldan sağa eşleşmesi gerekiyor mu? Yoksa problemi burada mı kaçırıyorum? JavaScript: –

+0

@FelixKling: Doğru, parantezin doğru yere taşınması sorunu çözüyor.Bizim, Ademiban'ın cevabını geri alabiliyor muyuz? –

+0

Geri almayı tercih etti.Tekrarın geri dönüşünü engelleyeceğinden, çözümün muhtemelen daha iyi. –

İlgili konular