itsource

문자열을 정규식으로 보간

mycopycode 2023. 6. 1. 22:43
반응형

문자열을 정규식으로 보간

문자열 값을 루비의 정규 표현으로 대체해야 합니다.이것을 하는 쉬운 방법이 있습니까?예:

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)}/
#...

Jon L.의 대답은 중요합니다!

if goo =~ /#{Regexp.quote(foo)}/

"명백한" 버전을 수행하는 경우:

if goo =~ /#{foo}/

일치 텍스트의 마침표는 정규식 와일드카드로 처리됩니다."0.0.0.0"일치할 것"0a0b0c0".

또한 하위 문자열 일치 여부를 확인하려면 간단히 다음을 수행할 수 있습니다.

if goo.include?(foo)

추가 견적이나 특수 문자에 대한 걱정이 필요하지 않습니다.

아마Regexp.escape(foo)시작점이 될 수도 있지만, 더 일반적인 표현식 표현을 사용할 수 없는 좋은 이유가 있습니까?"my stuff #{mysubstitutionvariable}"?

또한, 당신은 그냥 사용할 수 있습니다.!goo.match(foo).nil?문자 그대로의 문자열로

Regexp.compile(Regexp.escape(foo))

다음은 제한적이지만 유용한 다른 답변입니다.

Regexp를 사용하지 않고 Regexx에 쉽게 삽입할 수 있다는 것을 알게 되었습니다.입력 문자열에 단일 따옴표만 사용한 경우 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

이것은 정규식의 긴 부분을 여러 번 사용해야 할 때 도움이 되었습니다.보편적이지는 않지만, 질문의 예에 맞는다고 생각합니다.

Regexp.new 사용:

if goo =~ Regexp.new(foo) # Evaluates to /0.0.0.0/
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

반응형