Ameliyathaneyi, içinde olanı yakalamadan normal ifadede kullanabilir miyim?


115

Normal ifademi oluşturmak için rubular.com kullanıyorum ve belgelerinde şunlar açıklanıyor:

(...)   Capture everything enclosed
(a|b)   a or b

İçindekileri yakalamadan bir VEYA ifadesini nasıl kullanabilirim? Örneğin, "ac" veya "bc" yi yakalamak istediğimi varsayalım. Normal ifadeyi kullanamıyorum

(a|b)(c)

sağ? O zamandan beri bir grupta "a" veya "b" yi ve diğerinde "c" yi yakaladım, aynı değil. Yakalanan sonuçları filtreleyebileceğimi biliyorum ama bu daha fazla iş gibi görünüyor ...

Bariz bir şeyi mi kaçırıyorum? Uygunsa bunu Java'da kullanıyorum.


Rubular bağlantısı için güzel bir +1
bukowski

Yanıtlar:


181

Normal ifade uygulamasına bağlı olarak , sözdizimi ile yakalamayan grupları kullanabilirsiniz (?:…):

((?:a|b)c)

İşte (?:a|b)bir grup, ancak eşleşmesine referans veremezsiniz. Yani bunun eşleşmesine yalnızca ((?:a|b)c)ya acda bc.


o yaptı! Süper hızlı yanıt için teşekkürler. (Var olduğunu bilmediğim) zaman sınırı dolduktan sonra kabul edeceğim.
goggin13

4
Fikrin aya da bhiç yakalamak olmadığını düşündüm . Başka bir deyişle, hiç maç ac veya bc, ama sadece yakalamakc :(?:a|b)(c)
Alan Moore

1
@AlanMoore veya ifadesinde birini değil diğerini yakalamak mümkün mü? Ben desen arıyorum Yani acya abama çıkış istiyorum abeğer abve ancak 'c' çıktı 'ac' olmasıdır.
Moondra

24

Uygulamanızda varsa, yakalamayan parantezleri kullanabilirsiniz:

(?:a|b)

@mmutz Hızlı yanıt için teşekkürler! Keşke her iki yanıtı da kabul edebilseydim, tam da aradığım
buydu

3

Rubular bile parantez kullanmanıza neden olmaz ve bunun önceliği |düşüktür. Örneğin a | bc, ccc ile eşleşmez


'! ~' operatörü ne yapar?
İfadenizi beğendim

! ~ "eşleşmiyor" için bir perlizm, benim açımdan baştan savma bir yazıdı; düzeltildi, teşekkürler.
msw

2
Seni anlamıyorum Düşük öncelik |neden olduğunu do kullanım Pars gerekiyor. veya (?:a|b)ceşleşirken (istenen davranış) veya eşleşir . acbca|bcabc
Alan Moore

2

VEYA alternatiflerinizin tümü tek karakter ise - sadece "karakter kümesi" operatörünü kullanabilirsiniz:

([ab]c)

yalnızca eşleşecek acveya bcdaha okunaklı olacaktır.

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.