2011-03-31 7 views
2

[^(<em>.*?<\/em>)]과 같은 것이 사이의 텍스트를 제외하고 모두 <em>...</em>과 일치하도록 전체 단어에 대해 음수 일치를 사용할 수 있는지 궁금합니다.루비 정규식 : 음수 일치

나는 부정적 선견자를 사용하는 것에 대해 생각하고 있었지만, 이것이 열리기 위해서는 <em>도 확인해야하므로 생각하지 않습니다.

물론, 나는 정규식을 사용하고 원본 텍스트에서 일치 항목을 빼낼 수 있지만 좀 더 '우아한'해결책을 찾고 있습니다. lookaround에 도움

+0

관련 질문 : http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

답변

4

String#split은 음수 일치로 작동합니다. 정규식과 일치하지 않는 부분의 배열을 반환합니다.

'XXXXXXXX<em>YYYYYYY</em>ZZZZZZZZ'.split(%r|<em>.*?</em>|) 
# => ['XXXXXXX', 'ZZZZZZZZ'] 

그리고 다시 문자열로 바꾸려면 join을 사용하십시오.

'XXXXXXXX<em>YYYYYYY</em>ZZZZZZZZ'.split(%r|<em>.*?</em>|).join 
# => 'XXXXXXXZZZZZZZZ' 
0

모든 것은 대한

들으은 입력 중 하나를 소비하지 않습니다. 패턴 이외의 모든 것을 일치 시키려면 해당 패턴의 접두어와 접미어를 일치시키려는 것입니다. 접미어를 일치 시키려면 원하지 않는 패턴을 소비하고 버릴 수 있습니다. 그러나 부정적 예측은 소비하지 않습니다.