2016-07-12 6 views
1

내가, 내가 추출 할 수 있습니다 $의 형태 {아무것도}이 이런 식으로 뭔가를 사용하여 충분히 쉽게재귀 적으로 해결하는 자리

에 자리 표시자를 포함 된 문자열을 구문 분석에 대한 정규 표현식을 만들려고하고 $ 2 : (\ $ {(. *?)}) 내가 둥지 자리를 할 때 primary_region이 = "미주"및 americas1 = 유닉스 오전 host1의, 그때는 { $를 싶은 경우

어려움 예를 들어 온다 $ {primary_region} 1}을 사용하여 $ {americas} 1을 중개자로, 마지막으로 unix-am-host1로 변환하십시오.

위 정규식을 적용하면 $ 2가 "지역"대신 "$ {지역"을 산출합니다. 그래서 $ {$ {primary_region} 1}에 적용하면 primary_region을 추출한 다음 정규식을 적용 할 때 정규식이 필요합니다. $ {americas1} 당신의 식별자는 (그들이 예에 의해 판단) 단어 문자가 포함 된 경우 (즉, 1 개 이상의 [a-zA-Z0-9_] 문자와 일치) \w+를 사용

+0

당신은 내부의 괄호를 찾고 있습니다. 그것은'\ {([^ {}] +) \}'입니다. 그렇지 않으면 재귀 적 정규식과이를 지원하는 엔진이 필요합니다. – sln

+1

가장 좋은 방법은 처음부터 내부, 외부로 재 대결하는 것입니다. '\ $ \ {([^ {}] +) \}'$로 지정된 해시 값을 키로 대체하십시오. – sln

+0

@sin 나는 당신의 접근 방식을 성공적으로 사용하여 끝냈습니다. 대답으로 게시하면 올바른 것으로 받아 들일 것입니다. –

답변

1

americas1 추출합니다 :

(\$\{(\w+)\}) 
     ^^^ 

regex demo보기

다른 문자가있을 수 있지만,123,210 및 }, 당신은 [^{}] 부정 문자 클래스를 활용할 수 있습니다 :

(\$\{([^{}]+)\}) 

는 가장 좋은 방법은 처음부터 외부에 내부 때마다, 재대 결을하는 것입니다 this regex demo

+0

Victor, 잘못된 샘플 입력 및 예상 출력을 제공하지 않는 한 재귀가 필요하지 않습니다. –

1

참조하십시오.

매번 내부 대체하십시오. \$\{([^{}]+)\}
제공된 해시 값을 $1 키로 바꿉니다.

+0

wiktor 님이 이미 답변 해 주셨습니다. –