[ruby] 문자열을 정규식 Ruby로 변환

“/ [\ w \ s] + /”와 같은 문자열을 정규식으로 변환해야합니다.

"/[\w\s]+/" => /[\w\s]+/

다음 Regexp과 같은 다른 방법을 사용해 보았습니다 .

Regexp.new("/[\w\s]+/") => /\/[w ]+\//, 유사하게 Regexp.compileRegexp.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/}


답변