2014-11-03 12 views
0

질문을 잘못하는 경우 알려주십시오. 내가 올바른 각도에서 접근하고 있는지 확실하지 않습니다.두 키워드를 모두 인식하지 못함

내 정규식은 다음과 같습니다.

^.+(ef?)|(mn?).+$ 

아래 텍스트에서 2 행과 4 행을 일치 시키려고합니다.

ABCD가 보일 때, 마지막 하나는 편집자의 눈을 잡는다
MNOP

QRST
EFGH
IJKL. 내가 뭘 놓치고 있니?

나는 예를 들어 some examples을 감지하여 다음을 시도했습니다. "ALPHA"및 "베타"하지만 분명히 나는 ​​그것이 작동하는 방식을 너무나 잘 모릅니다.

+2

아시다시피, '^. +'는 처음에 기호가 하나 이상 있음을 의미합니다. 그러나'efgh' 나'mnop'은'ef' 나'mn' 전에는 아무것도 포함하고 있지 않습니다. – Epsilon

+0

@ 엡실론 실제로 있습니다. 그것은 단지 보여주지 않습니다. 내 잘못이야. 그 전에 캐릭터가 있다고 생각하거나 (또는 ​​플러스가 아닌 별표로) 전환하십시오. :) –

답변

2

정규식 엔진은 아래 정규식을 두 부분으로 나눕니다.

^.+(ef?)|(mn?).+$ 

    Part 1| Part 2 

처음에는 part1이 실행됩니다.

^.+(ef?) 

.+은이어야 단일 문자 존재 e 전에이 있어야 보장하지만,이 없다. 그래서 두 번째 것과 일치하지 않습니다. 나머지 문자열에 문자 e이 없기 때문에 다른 모든 문자에 대해서는 실패합니다.

| 또는 두 번째 부분에 이제 정규식 엔진 이동

,

(mn?).+$ 

는 편지 m이 들어있는 문자열을 일치시킵니다. m은 네 번째 문자열에만 나타납니다. 따라서 .+ 때문에 m와 하나 이상의 문자가 일치합니다.

2, 4 문자열과 일치하는 올바른 방법은 다음과 같습니다

^.*(ef?).*$|^.*(mn?).*$ 

또는

^.*(?:(ef?)|(mn?)).*$  

DEMO

사용 ^.*(?:(ef?)|(mn?)).+$,이 있어야하는 경우 문자가 다음 e 및 선택 사항 인 f 또는 m 및 선택 이온 n

e 또는 m으로 시작하는 문자열을 일치 시키려면 아래의 정규식을 사용하십시오.

^(ef?|mn?).+$ 

참고 :

  • .*는 임의의 문자를 0 번 이상 일치합니다.
  • .+은 한 번 이상 문자를 찾습니다.
+0

굉장합니다. 그게 내가 놓친 문제 야! 귀하의 대답은 기술적으로 정확하지만 정확한 구문을 보여주는 판을 제안합니다. 단지 BS (나는 주위에 그렇게 일반적인 일) 의혹을 피하기 위해 다른 사람들이 내 일을하도록 내버려두고, 내가 당신의 답장을 편집 할 자유를 취할 것입니다. 만족스럽지 않으면 수정하십시오. +1 정확도의 괴상한 수준입니다. –

+0

예, 예, 했어요. 왜 물어 보니? –

관련 문제