Ruby 정규식에 Perl에서 "! ~"와 같은 일치하지 않는 연산자가 있습니까?


92

루비 정규식 !~에 펄 과 마찬가지로 일치하지 않는 연산자가 있는지 알고 싶습니다 . 사용 하기 불편 (?!xxx)하거나 부분 (?<!xxxx)에서 정규식 패턴을 사용할 수 없기 때문에 불편하다고 느낍니다 xxx.


8
당신이해야 할 일은 불을 지르고 irb시도하는 것 뿐 이었습니다 . 아마도 SO 질문을 게시하는 것보다 빠를 것입니다.
마크 토마스

33
하지만 빠른 '루비 일치하지'인터넷 검색 등이 답을 찾는 것보다)
micapam을

3
나는 막히고 인터넷 검색을 하고이 답변을 찾기 전에 잠시 실험했습니다. 질문을 한 사람에게 절대로 덤비지 마십시오.
Jonathon Nordquist

2
그는 그것을 차선책으로 표현했습니다. 그가 말하고자했던 것은 "당신이 불을 irb붙이고 시도 할 수 있다는 것을 기억 하십시오. 아마도 SO 질문을 게시하는 것보다 더 빠르며, 일반적으로 모든 것을 테스트 할 수있는 좋은 기회입니다." 그 방법은 내가 어쨌든, 그것을 들었다.
user2066657

답변:


156

예 : !~잘 작동합니다 . 의 문서 페이지에서 누락Regexp 되었기 때문에 그렇지 않을 것이라고 생각했을 것 입니다 . 그럼에도 불구하고 작동합니다.

irb(main):001:0> 'x' !~ /x/
=> false
irb(main):002:0> 'x' !~ /y/
=> true

8
!~Object 아래에 설명되어 있습니다.
Tonči D.

3
루비 2.4에는 RegExp#match?쉽게 부정 할 수 있는 좀 더 좋은 구문 이 있습니다. 릴리스 노트 에 따르면 , 더 적은 할당을 수행합니다!~
panmari

6

AFAIK (?! xxx)가 지원됩니다.

2.1.5 :021 > 'abc1234' =~ /^abc/
 => 0
2.1.5 :022 > 'def1234' =~ /^abc/
 => nil
2.1.5 :023 > 'abc1234' =~ /^(?!abc)/
 => nil
2.1.5 :024 > 'def1234' =~ /^(?!abc)/
 => 0

낮은 수준의 솔루션입니다. 이런 식으로 정규 표현식을 변환하는 것이 항상 쉬운 것은 아닙니다. 다른 한편으로,이 솔루션은 최고 수준의 프로그래밍 언어에 의존하지 않는다)
콘스탄틴

0

Perl 'foobar' !~ /bar/로 돌아와서 문자열에 "bar"가 포함되어 있지 않은지 테스트하는 것이 완벽했습니다.

Ruby에서는 특히 현대적인 스타일 가이드를 사용하면보다 명시적인 솔루션이 더 일반적이고 이해하기 쉽다고 생각합니다.

input = 'foobar'

do_something unless input.match?(/bar/) 

needs_bar = !input.match?(/bar/)

즉, .no_match?방법 이 있으면 매운 것 같아요 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.