문자열을 정규식 루비로 변환
"/[\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
'source' 카테고리의 다른 글
ssh: 호스트 github.com 에 연결 포트 22: 연결 시간 초과 (0) | 2023.06.01 |
---|---|
루비 온 레일즈: 어떻게 문자열을 HTML로 렌더링합니까? (0) | 2023.06.01 |
Postgres 데이터베이스의 모든 테이블 잘라내기 (0) | 2023.06.01 |
UI 테이블 뷰의 선택된 인덱스 가져오기 (0) | 2023.06.01 |
TextView textStyle(예: 굵게, 기울임꼴)을 설정하는 방법 (0) | 2023.06.01 |