2013-02-25 12 views
7

W jaki sposób używany jest operator "jeden lub więcej" w wyrażeniu regularnym dla języka Java? Na przykład, chcę, aby dopasować to:Dopasowywanie wzorca Java Regex - operator "Jeden lub więcej"

((a) (b) (c)) - dopasowuje

((a)) - dopasowuje

gdzie a, b, c są jakieś znaki lub cyfry

podstawowy opis tego wyrażenia jest zestawów nawiasach w zestawie nawiasów, który zawiera wszystkie zestawy oddzielonych jednej białej przestrzeni

+0

[Co próbowałeś?] (Http://whathaveyoutried.com) –

+0

([(+).] +) <- ale to nie działa – Aneem

+0

Czy każdy zestaw ma tylko jeden element lub jest ((a, b, c)) ważny? –

Odpowiedz

11

chcesz coś podobnego \((\(\w*\))+\)

Żeby było jaśniej, jak to działa, rozwinąć go trochę wizualnie:

\( # outer bracket 
( # start of group 
\( # inner bracket 
\w* # 0 or more word characters ([0-9a-zA-Z_]) 
\) # inner bracket 
)  # end of group 
+  # and we do that group 1 or more times 
\) # outer bracket 

Objaśnienie: Jeśli stosuje się * lub + lub? do czegoś, co znajdowało się w nawiasach (bez zmiany kształtu), następnie jest stosowane do całej zawartości nawiasów zamiast do jednego elementu.

Ilekroć mam regex pytanie patrzę go w http://www.regular-expressions.info/reference.html

+0

@Supericy Jeśli między nawiasami są spacje, dodaj spacje również w wyrażeniu regularnym (lub '\ s *' jeśli chcesz mieć ogólną ilość białych znaków) – Patashu

+1

@Aneem w Javie musisz użyć dwóch backslash \\ przekazuje go do silnika wyrażeń regularnych jako jeden ukośnik odwrotny \, ponieważ jest to również znak specjalny w łańcuchu. – Pshemo

+1

@Aneem: Java używa ukośników odwrotnych, aby uniknąć znaków specjalnych, takich jak '\ t' i' \ n' w łańcuchach - co oznacza, że ​​ukośniki odwrotne znikają w momencie, gdy parser wyrażeń regularnych je widzi. Aby tego uniknąć, musisz podwoić liczbę odwróconych ukośników. – Patashu

Powiązane problemy