2013-07-28 4 views
1
나는 중괄호 쌍 정확히 하나 명의 발생을 일치하는 정규식이 필요

: 여기 정규식 : 일치하는 단 하나의 발생

myString_{1-10}   -> match 
myString_{hello}_xyz -> match 
myString_{1-10}_{hello} -> do not match 

내 정규식된다 ​​

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

문제는 그 또한 내 정규식 중괄호 쌍 중 둘 이상을 포함하는 문자열과 일치합니다. 무엇이 누락 되었습니까?

+0

방법은 타의 추종을 불허하는 괄호 처리? 예를 들어,'myString _} {}'또는'myString _ {} _ {' – SheetJS

+0

전체 단락을 정규식으로 바꾸고 있거나 한 줄씩 줄을 서서 가고 있습니까? –

답변

2

이를 사용할 수 있습니다

^[^{}]*\{[^}]*\}[^{}]*$ 

설명 :

당신은 중첩 된 괄호 또는 타의 추종을 불허하는 괄호 처리를 취할 필요가
^[^{}]* // Match 0 or more occurrences of character other than [{}] 
\{  // Match a `{` 
[^}]*  // Match 0 or more occurrences of character other than } 
\}  // Match a `}` 
[^{}]*$ // Match 0 or more occurrences of character other than [{}] 

너무

+2

@Downvoter. 신경 쓰지 마세요. –

+0

그리고 중괄호 사이의 내용 만 원하는 경우 어떻게해야합니까?^{^ {}} * * (? <= \\ {) [^}] * (? = \\}) [^ {}] * $ 그러나 작동하지 않습니다. – j3d

+0

그냥 콘텐츠 이동 위의 정규 표현식 그룹에서'{'와'} '내에. 당신은 룩 어라운드 (look-around)를 사용하고 있는데, 이것이 실패한 이유입니다. '^ [^ {}] * \ {([^}] *) \} [^ {}] * $'를 사용하여 캡처 된 그룹 '1'을 얻으십시오. –

0

당신이 전체 정규식 - 보내고 경우 3 줄 모두를 포함하는 변수는 다음과 같습니다.

(\{.*?\})_*(?:\{)* 

출력물에는 찾고자하는 내용이 정확하게 포함됩니다.

이 경우 "모두 일치하는"플래그가 필요합니다.

+0

밑줄은 예제 일뿐입니다. 어떤 문자라도 가능합니다. – j3d

0

당신은 멀티 라인 모드와 .NET에서이 패턴을 사용할 수 있습니다

(?<=^(?>[^{\n]*))\{[^}]*\}(?=[^{\n]*$)