“/ [\ w \ s] + /”와 같은 문자열을 정규식으로 변환해야합니다.
"/[\w\s]+/" => /[\w\s]+/
다음 Regexp
과 같은 다른 방법을 사용해 보았습니다 .
Regexp.new("/[\w\s]+/") => /\/[w ]+\//
, 유사하게 Regexp.compile
및 Regexp.escape
. 그러나 그들 중 어느 것도 내가 예상 한대로 돌아 오지 않는다.
더 나아가 백 슬래시를 제거해 보았습니다.
Regexp.new("[\w\s]+") => /[w ]+/
그러나 운이 없습니다.
그런 다음 간단하게 시도했습니다.
str = "[\w\s]+"
=> "[w ]+"
탈출합니다. 이제 문자열을 그대로 유지하고 regexp 객체로 변환하는 방법은 무엇입니까?
답변
여기에 작은 따옴표로 묶인 초기 문자열이 필요합니다 ( 이 페이지 참조 ).
>> str = '[\w\s]+'
=> "[\\w\\s]+"
>> Regexp.new str
=> /[\w\s]+/
답변
확실하게
/#{Regexp.quote(your_string_variable)}/
너무 일하고있다
편집 : 정확성을 위해 Regexp.quote에 your_string_variable을 래핑했습니다.
답변
이 메서드는 특별한 의미를 가진 모든 문자를 안전하게 이스케이프합니다.
/#{Regexp.quote(your_string)}/
예를 들어 .
는 ‘모든 문자’로 해석되기 때문에 이스케이프됩니다.
백 슬래시가 특별한 의미를 갖는 일반적인 문자열 보간을 원하지 않는 한 작은 따옴표로 묶인 문자열을 사용하는 것을 잊지 마십시오.
답변
% 표기법 사용 :
%r{\w+}m => /\w+/m
또는
regex_string = '\W+'
%r[#{regex_string}]
에서 도움 :
% r [] 보간 된 정규식 (플래그는 닫는 구분 기호 뒤에 나타날 수 있음)
답변
gem to_regexp 가 작업을 수행 할 수 있습니다.
"/[\w\s]+/".to_regexp => /[\w\s]+/
수정자를 사용할 수도 있습니다.
'/foo/i'.to_regexp => /foo/i
마지막으로 : detect를 사용하여 좀 더 게을러 질 수 있습니다.
'foo'.to_regexp(detect: true) #=> /foo/
'foo\b'.to_regexp(detect: true) #=> %r{foo\\b}
'/foo\b/'.to_regexp(detect: true) #=> %r{foo\b}
'foo\b/'.to_regexp(detect: true) #=> %r{foo\\b/}