source

문자열을 정규식 루비로 변환

ittop 2023. 6. 1. 22:58
반응형

문자열을 정규식 루비로 변환

"/[\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)}/

역시 작동 중입니다.

edit: Regexp에서 _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/}

방금 이것을 우연히 만났는데, 여기서 '/[\w\s]+/' 문자열을 트랜스파일러에서 정규식으로 변경해야 합니다.eval을 사용했습니다.

irb(main):001:0> eval( '/[\w\s]+/' )
=> /[\w\s]+/

언급URL : https://stackoverflow.com/questions/8652715/convert-a-string-to-regular-expression-ruby

반응형