ruby - 추출 - 정규식 특수문자
regex 패턴을 이스케이프하는 대신 다른 방법은? (4)
보통 내 정규식 패턴이 다음과 같이 보일 때 :
http://www.microsoft.com/
그럼 난 이렇게 탈출했다 :
string.match(/http:\/\/www\.microsoft\.com\//)
그런 식으로 탈출하는 대신 다른 방법이 있습니까?
나는이 패턴을 http://www.microsoft.com 처럼 사용할 수 있기를 원하며, 나는 모든 패턴에서 모든 특수 문자를 피하고 싶어한다.
https://src-bin.com
Answer #1
또한 % r을 사용하고 정규 표현식 앞에 문자를 정의하여 정규 표현식에 대해 임의의 구분 기호를 Ruby에서 사용할 수 있습니다 (예 :
%r!http://www.microsoft.com/!
Answer #2
이스케이프에 작은 따옴표를 사용하기 만하면됩니다.
string.match('http://www.microsoft.com/')
텍스트 자체에 작은 따옴표가 필요하면 %q{}
사용할 수도 있습니다. 문자열 내에서 변수를 외삽 할 필요가 있다면, %Q{}
. 문자열에 정규 표현식 (예 : .*?()[]^$
)이 포함 된 경우 // 또는 % r {}을 사용하여 외삽 할 수 있습니다.
Answer #3
Regexp.quote
또는 Regexp.escape
는 자동으로 이스케이프 처리하는 데 사용할 수 있습니다.
http://ruby-doc.org/core/classes/Regexp.html#M001195
결과를 Regexp.new
에 전달하여 Regexp 객체를 만든 다음 객체의 .match
메서드를 호출하고 일치시킬 문자열 ( string.match(/regex/)
의 반대 순서)을 string.match(/regex/)
있습니다.
Answer #4
Regexp.new(Regexp.quote('http://www.microsoft.com/'))
Regexp.quote
는 특수한 regexp 의미를 갖는 모든 문자를 단순히 이스케이프합니다. 문자열을 취하고 반환합니다. 유의하십시오 .
특별하다. 인용 한 후에 생성자에 전달하기 전에 필요에 따라 regexp에 추가 할 수 있습니다. 간단한 예 :
Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)')
이렇게하면 나머지 경로에 대한 캡처 그룹이 추가됩니다.