문자열을 정규식으로 보간
Ruby의 정규 표현식으로 문자열 값을 대체해야합니다. 이 작업을 수행하는 쉬운 방법이 있습니까? 예를 들면 다음과 같습니다.
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0"
if goo =~ /value of foo here dynamically/
puts "success!"
end
문자열 삽입과 동일합니다.
if goo =~ /#{Regexp.quote(foo)}/
#...
있습니다 Regexp.quote
에서 존 L.의 대답은 중요하다!
if goo =~ /#{Regexp.quote(foo)}/
"명백한"버전을 사용하는 경우 :
if goo =~ /#{foo}/
일치하는 텍스트의 마침표는 정규식 와일드 카드로 취급 "0.0.0.0"
되며 일치 "0a0b0c0"
합니다.
하위 문자열 일치를 확인하려는 경우 간단하게 수행 할 수 있습니다.
if goo.include?(foo)
특수 문자에 대한 추가 인용이나 걱정이 필요하지 않습니다.
Regexp.compile(Regexp.escape(foo))
아마도 Regexp.escape(foo)
시작점이 될지 모르지만보다 일반적인 표현식 보간을 사용할 수없는 좋은 이유가 "my stuff #{mysubstitutionvariable}"
있습니까?
또한 !goo.match(foo).nil?
리터럴 문자열과 함께 사용할 수 있습니다 .
Regexp.new를 사용하십시오.
if goo =~ Regexp.new(foo) # Evaluates to /0.0.0.0/
다음은 제한적이지만 유용한 다른 답변입니다.
입력 문자열에 작은 따옴표를 사용하면 Regexp.quote 또는 Regexp.escape를 사용하지 않고 정규식에 쉽게 삽입 할 수 있음을 발견했습니다. (IP 주소 일치)
IP_REGEX = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
my_str = "192.0.89.234 blahblah text 1.2, 1.4" # get the first ssh key
# replace the ip, for demonstration
my_str.gsub!(/#{IP_REGEX}/,"192.0.2.0")
puts my_str # "192.0.2.0 blahblah text 1.2, 1.4"
작은 따옴표는 \\ 및 \ '만 해석합니다.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
이것은 정규 표현식의 동일한 긴 부분을 여러 번 사용해야 할 때 도움이되었습니다. 보편적이지는 않지만 질문의 예에 맞습니다.
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0"
puts "success!" if goo =~ /#{foo}/
참고 URL : https://stackoverflow.com/questions/150095/interpolating-a-string-into-a-regex
'programing tip' 카테고리의 다른 글
Django가 ONCE 만 시작할 때 코드를 실행 하시겠습니까? (0) | 2020.06.13 |
---|---|
파일이 이미 존재하는 경우이를 제거하는 쉘 스크립트 (0) | 2020.06.13 |
가변 길이 문자열에 대한 더 나은 유사성 순위 알고리즘 (0) | 2020.06.13 |
Enum에서 문자열을 검색하고 Enum을 반환 (0) | 2020.06.13 |
CryptographicException '키셋이 없습니다', 그러나 WCF를 통해서만 (0) | 2020.06.12 |