2011-03-06 1 views
2

나는이 같은 문자열과 일치하는 정규 표현식을 작성하려고 해요 :부정적인 Lookbehind 정규 표현식은 - 어떻게 " ("가 아닌 "("루비 만 일치 할

title(Hello+World)    #=> [title, Hello+World] 
title(\(Hello+World\))   #=> [title, \(Hello+World\)] 
title((Hello+World))   #=> [title, (Hello+World)] 
title(Well+Hello+World+!)  #=> [title, Well+Hello+World+!] 
title(Well+\(Hello+World\)+!) #=> [title, Well+\(Hello+World\)+!] 
title(Well+(Hello+World)+!) #=> [title, Well+(Hello+World)+!] 

무엇을? 시작 내에서 문자열을 추출하는 가장 간단한 방법은 (이고 끝 부분은 ) 토큰입니다. 추출 할 문자열의 어느 곳에 나 토큰이있을 수 있다고 가정하면

답변

2

그 백 슬래시를 결과로 남겨 둘지는 모르겠지만 여기에 있습니다. 그것없이 하나, 그리고 네, 여기에 부정적인 lookbehind를 사용하지 않습니다.

.scan(/(\w+)\(((?:\([^)]+\)|[^()]+)+)\)/) 

=> [ 
["title", "Hello+World"], 
["title", "(Hello+World)"], 
["title", "(Hello+World)"], 
["title", "Well+Hello+World+!"], 
["title", "Well+(Hello+World)+!"], 
["title", "Well+(Hello+World)+!"] 
]