ruby - 체크 - 정규표현식 그룹
Ruby:부울 정규 표현식의 올바른 구문은 무엇입니까? (6)
어떤 문자열을 패턴으로 검사하고 정규 표현식이 일치하면 true 또는 false를 반환하는 메서드의 올바른 구문은 무엇입니까?
기본 아이디어 :
def has_regex?(string)
pattern = /something/i
return string =~ pattern
end
사용 사례 :
if has_regex?("something")
# woohoo
else
# nothing found: panic!
end
Ruby 2.4 또는 그 이후 버전을 사용하고 있다면, String#match?(regex)
와 Regexp#match?(string)
메쏘드가 필요합니다.
https://ruby-doc.org/core-2.4.0/Regexp.html#method-i-match-3F
Ruby> = 2.4 또는 Rails의 경우 다음을 수행 할 수 있습니다.
regexp.match?(string)
누구든지 나중에 참조 할 수 있도록 bbatsov의 루비 스타일 가이드 에서 이중 앞머리가 눈살을 찌푸리게합니다. double bang을 사용하는 대신 값 이 nil 이 아닌지 확인하십시오. 값이 nil이 아니면 존재하지 않습니다.
대신 이렇게 :
def has_regex?(string)
!!(string =~ /something/i)
end
당신은 언제나 이것을 할 수 있습니다 :
def has_regex?(string)
!(string =~ /something/i).nil?
end
당신이 말한 질문에서 :
... 패턴에 대한 문자열을 검사하고 정규 표현식이 일치하면 true 또는 false를 반환하는 메서드
johannes 지적했듯이 String=~
은 패턴이 일치하지 않으면 nil
반환하고 일치하는 단어가 그렇지 않은 경우 문자열의 위치를 반환합니다. 더 나아가서 그는 루비에서 nil
과 false
제외한 모든 것은 true
와 같다고 말합니다. 이 모든 것이 옳다.
그러나, 그들은 정확하게 true
또는 false
이 아닙니다. 따라서 마지막 단계는 값을 Boolean
값으로 강제 변환하는 것입니다. 이것은 double bangs로 결과를 래핑하면 true
반환 true
.
def has_regex?(string)
!!(string =~ /something/i)
end
코드는 괜찮아 보이지만 더 작게 작성할 수도 있습니다.
String#=~
의 반환 값은 다음과 같이 동작합니다.
- 패턴이 일치하지 않으면
nil
- 일치하는 단어가 시작된 문자열의 위치
Ruby에서 nil
과 false
제외한 모든 것은 조건문에서 true
와 같이 동작하므로 쓰기 만하면됩니다.
if string=~ pattern
# do something
else
# panic
end
특정 프로젝트에만 국한되지 않고 일반적으로이 작업을 원했기 때문에 환경을 전혀 수정하지 않으려 고합니다.
조건 match
로 정상 match
메서드의 반환 값을 사용하여 작업을 수행 할 수있었습니다. 이 샘플 문자열에서 양수 및 음수 모두를 테스트했습니다.
irb(main):014:0> if "123".match(/.2./); puts "worked"; end
worked
=> nil
irb(main):015:0> if "123".match(/.3./); puts "worked"; end
=> nil