정규 표현식에 배열을 포함 할 수 있지만 보간법을 직접 사용할 수는 없습니다. 알게 되듯이, 직접 보간하면 character class이되며, 요소의 모든 문자와 큰 따옴표와 쉼표가 일치합니다.
대신 사용
ary = ['a']
regex = Regexp.union(ary) # => /a/
/#{regex.source}/ # => /a/
ary = ['a', 'b']
regex = Regexp.union(ary) # => /a|b/
/#{regex.source}/ # => /a|b/
당신은 문서에 Regexp.union
및 source
에 대한 자세한 내용을보실 수 있습니다.
하지만 잠깐! 더있다! 일반적으로
당신은 자식 표현이 거짓 양성 안타를 하위 문자열 생성 갑자기 피하기 위해 해당 그룹에 원하는 : 정규식 엔진은 욕심 때문에
/foo#{regex.source}/ # => /fooa|b/
하는, 일치합니다 fooa
또는 b
:
'fooa'[/foo#{regex.source}/] # => "fooa"
'foob'[/foo#{regex.source}/] # => "b"
대신 도움이 될 것입니다 :
/foo(?:#{regex.source})/ # => /foo(?:a|b)/
'fooa'[/foo(?:#{regex.source})/] # => "fooa"
'foob'[/foo(?:#{regex.source})/] # => "foob"
하지만 더있어!
: 문서에서
regex = Regexp.union(ary) # => /a|b/
/#{regex}/ # => /(?-mix:a|b)/
:
포함 된 정규 표현식은 당신이 관심을 지불하지 않는 경우 디버그 문제에 하드의 결과로 보간 할 때 보존 options 자체적를 유지
i
, m
및 x
도 (? on-off) 구문을 사용하여 하위 표현식 수준에 적용 할 수 있습니다.이 경우 하위 메뉴에서 을으로 설정하고 괄호로 묶인 표현의 경우 을에서 해제합니다.외부 패턴은 대소 문자를 구분하지 일치에 대해 다른 옵션 말을 사용하는 경우
다음과 같은 일이 일어날 수 :
regex = /FOO/
'foo'[/#{regex}/i] # => nil
당신은 외부 표현에
i
옵션을 수정 것이라고 생각할 것입니다
물건 그러나 여기에서 무슨 일이 일어나고있는 작업은 다음과 같습니다
/#{regex}/i # => /(?-mix:FOO)/i
간단한 수정 식의 텍스트를 반환하지만 위의 예에서처럼 source
방법을 사용하는 것입니다 옵션의 설정 :
/#{regex.source}/i # => /FOO/i
'foo'[/#{regex.source}/i] # => "foo"
는 source
는 항상 올바른 일이 아니다 사용하지만, 당신이 의도적으로에 포함 된 표현을 사용하려는 경우가있다 확실 할 때까지 많은 도움이 다른 옵션 세트. 이 시점에 이르면 해당 시점에 코드에 대해 잘 주석을 달아 미래의 사람 또는 코드를 상속받은 다른 사람이 무슨 일이 일어나는지 이해할 수 있도록하십시오. 그렇지 않으면 무슨 일이 일어나고 있는지 파악하는 데 며칠이 걸릴 수 있습니다.
더 확장하려면 보간 (내부 문자열 또는 정규식)이 보간되는 객체에서 '# to_s'를 호출하고이를 사용합니다. 네, 정답입니다. – ndn
찾았지만 수정 사항을 찾지 못했습니다. 대답은 문제를 지적 할뿐 아니라 수정본을 제공하고 설명하기로되어 있습니다. –