2012-04-12 5 views
2

괄호없는 괄호 문자를 포함하는 4 세트의 대괄호와 일치하는 정규 표현식을 작성하는 방법을 알아 내려고합니다.Java Regex : 여러 괄호 집합과 문자열 일치

예를 들어 일치해야합니다.

[hello][world][foo][bar] 
[][][][] 

이들은 안 : 내가 잘못 본게 아니라면

[a][b][c] 
[a][b][c][d]e 
[[a]][b][c][d] 

이 (아래) 하나 개의 브라켓 세트 내의 문자와 일치하는 것으로 보인다.

\\[[^\\[\\]]*\\] 

다음을 수행하여 4 세트로 확장 할 수 있다고 생각했지만 작동하지 않습니다.

[\\[[^\\[\\]]*\\]]{4} 

무엇이 여기에 있습니까? 모든 도움을 미리 감사드립니다. 감사합니다. 제임스는 아래에 지적한대로 당신이하려고했던 것처럼

(\\[[^\\[\\]]*\\]){4} 

, 보이는 :

답변

9

이 시도 :

Pattern p = Pattern.compile("^(\\[[^\\[\\]]*\\]){4}$"); 

가 당신을 위해 분해하려면

"^(\\[[^\\[\\]]*\\]){4}$" 
││├─┘├───────┘│├─┘ │ └─ the end of the line. 
│││ │  ││ └─ repeat the capturing group four times. 
│││ │  │└─ a literal "]" 
│││ │  └─ the previous character class zero or more times. 
│││ └─ a character class containing anything but the literals "[" and "]" 
││└─ a literal "[". 
│└─ start a capturing group. 
└─ the beginning of the string. 
+0

답장을 보내 주셔서 감사합니다. 대괄호 나 괄호를 사용할 때 혼란 스럽습니다. "[^ \\\ [\\\]] *"= 0 개 이상의 괄호 문자는 없지만 "(abc) {4}"= abc는 4 번 사용합니다. 그 중 하나는 다른 것에 비해 언제 사용되어야 하는가? – Dazarath

+0

@Dazarath : 이전 토큰 *에 대해 반복/수량 기호 연산자 ('?','+','*','{n, m}')가 작용하고'(...) 클래스'[...]'는 모두 토큰이됩니다. 실제로 시퀀스에서 토큰을 생성하기 때문에 캡처 그룹 (또는 * non * -capturing 그룹'(? : ...))을 사용하는 것이 일반적입니다. 따라서 "foo"라는 단어를 여러 번 찾으려면 이전 토큰이'o'이므로'foo * '라고 말할 수 없으므로'(foo) *'라고 말해야합니다. – maerics

4

당신은 그렇지 않으면 그것은 단지 최종 ] 4 번 반복 뭔가를 일치, 그룹에 반복하려는 덩어리 필요 () 대신 그룹화에 []을 사용하십시오. 이것은 오류가 발생한 부분 일 가능성이 큽니다.

+1

당신은 실제로 그 여분의 바깥 쪽 괄호를 삭제해야합니다. –

+0

복사, 붙여 넣기 오류가 발생했습니다. 결정된. – VeeArr