특정 단어와 일치하는 정규식을 작성하려면 어떻게해야합니까?


21

특정 정규식을 작동 시키려고 노력했지만 필요한 작업을 수행 할 수 없습니다.

기본적으로 ROCKET을 찾고 싶습니다. 정규식은 대문자 또는 소문자로 구두점을 사용하거나 사용하지 않고 ROCKET과 일치해야하지만 다른 단어의 일부는 아닙니다. 따라서 정규 표현식은 다음 중 하나를 트리거합니다.

rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine

그러나 ROCKET이 다음과 같은 경우에는 트리거되지 않습니다.

Rocketeer
Sprocket

온라인 정규식 생성기를 사용하여 올바르게 만들려고했지만 정확하게 일치시킬 수는 없습니다.


1
질문이 스택 오버플로에 더 적합한 경우는 드문 경우입니다. 각 언어마다 고유 한 특성이 있으므로 언어 ​​및 / 또는 플랫폼을 제공하십시오. 예를 들어, Windows입니다. .Net 및 Regex 클래스 . (일반적으로 그 반대입니다. 스택 오버플로는 수퍼 유저에게 더 적합한 개발자로부터 수백 가지의 주제를 벗어난 질문을받습니다).
jww

답변:


14

MSDN 정규식 빠른 참조를 책갈피로 지정하는 것이 좋습니다.

영숫자가 아닌 문자로 둘러싸인 "rocket"이라는 단어는 대소 문자를 구분하지 않고 일치 시키려고합니다. 작동하는 정규식은 다음과 같습니다.

\W*((?i)rocket(?-i))\W*

영숫자가 아닌 (\ W) 문자를 찾은 다음 대소 문자를 구분하지 않는 버전의 로켓 ((? i) rocket (?-i))을 찾은 다음 다시 0 이상 ( *) 영숫자가 아닌 문자 (\ W). 로켓 일치 용어 주위의 추가 괄호는 일치를 별도의 그룹에 할당합니다. 로켓이라는 단어는 일치 그룹 1에있게됩니다.

업데이트 1 : Matt 은이 정규 표현식이 파이썬에서 사용될 것이라고 의견에 말했습니다. 파이썬은 약간 다른 문법을 가지고 있습니다. 파이썬에서 동일한 결과를 얻으려면이 정규 표현식을 사용하고 re.IGNORECASE옵션을 compile또는 match함수에 전달하십시오 .

\W*(rocket)\W*

Regex101 이는 "I"텍스트 박스 옆 정규식 입력에 입력하여 시뮬레이션 할 수있다.

업데이트 2 Ismael은 "1rocket1"과 일치 할 수 있기 때문에 정규 표현식이 정확하지 않다고 언급했습니다. 그는 훨씬 더 나은 해결책, 즉

(?:^|\W)rocket(?:$|\W)


1
온라인 정규 표현식 테스터 ( 예 : regex101.com) 로 이것을 테스트하면 입력 한 예제 문자열이 유효하지 않고 일치하지 않는 것으로 표시됩니다. 이것은 파이썬 스크립트의 일부로 사용됩니다. 그것이 어떻게 작성되어야합니까?
Kefka

1
그렇습니다. 당신은 regex101.com에서 왼쪽 상단에서 정규식 "맛"을 선택할 수 있다는 것을 알 수 있습니다. 파이썬은 약간 다릅니다. 나는 파이썬과 동등한 것으로 대답을 업데이트 할 것입니다.
Xaser

1
감사. 정규 표현식은 기본적으로 언어 독립적이라고 생각했습니다.
Kefka

1
그것들은되어야하지만, 약간의 구현 차이가 존재합니다.
Xaser

2
그리고 \W*(rocket)\W*일치 lrocketl합니다. 그것은해야 (?:^|\W)(rocket)(?:$|\W)합니다 (없이 *당신은 문자열의 시작 및 / 또는 끝과 일치하는지 확인해야합니다).
Ismael Miguel

10

이 경우 미리보기가 과도하다고 생각하며 ignorecase옵션 과 함께 단어 경계를 사용하는 것이 좋습니다 .

\brocket\b

다시 말해, 파이썬에서 :

>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I)  # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']

기술적으로 캡처하지 않은 그룹은 대안이 아니지만 / b 옵션은 Ismael의 솔루션과 동일한 결과를 나타내지 만 조금 더 우아 할 수 있습니다.
Xaser

1

grep하고 sed, 당신은 사용할 수 있습니다 \<rocket\>. 으로 grep-i옵션은 그것을 대소 문자를 구별를 (만들 것입니다 내가 사건을 gnore) :

grep -i '\<rocket\>'

모든 sed정규 표현식을 대소 문자를 구분하지 않는 방법으로 알지 못하지만 항상 원시인 방법이 있습니다.

sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'

0

전체 단어 만 검색 옵션을 사용하십시오.

문장 부호까지는 풍미 / 맛을 알 때까지는 대답 할 수 없습니다.

매우 오래된 스레드이므로 나중에 필요로 방문 할 수있는 사람을 위해 게시되었습니다. 실을 만든 사람들이 다른 곳으로 옮겼을 수도 있습니다.


또는 무엇을 whole words only option사용 grep하고 php있습니까? 죄송하지만 귀하의 답변은 다른 답변과 비교하여 부가 가치를 제공하지 않습니다.
Toto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.