2014-10-02 2 views
0

나는 this tutorial을 따르고 있습니다. X정규 표현식이 특수 문자와 일치합니다

Regex.Match("a^7lowah", @"\ba\w*\b").Success.Dump(); 

그것은이 "는이"를 가지고로 시작하는 단어와 일치해야합니다 :

내 정규 표현식을 테스트하기 위해 노력했다 (방법 덤프는 콘솔에 표시하는 linqpad에서입니다) 영숫자가 단어 끝까지 나옵니다.

하지만 불행히도 위의 정규 표현식은 일치합니다.

정규식의 나의 이해 :

  • "\ B를"(단어의 시작)
  • "A"(정당한 문자)
  • "\ w"(영숫자)
  • 는 "\ B를"(단어의 끝)

내가 무슨 일을하고있는 중이 야 (이전 용어를 반복)

  • "*" ?

  • +0

    정말 이상합니다. 정규 표현식에 문제가 없으며 일치하지 않아야합니다. –

    +0

    이 일치가 성공하지 못하게하는 이유를 지정해야합니다. 첫 번째'a' 다음에'^'가 오도록하기 때문입니까? 입력 전체가 출력과 일치해야하기 때문입니까? 그것은'a'가 하나 이상의 문자가 아닌 0이 뒤따라 오기 때문입니까? – Rawling

    답변

    4

    예, 정규식이 일치합니다.

    Pattern: \ba\w*\b 
    String: a^7lowah 
    

    *은 "0 이상"을 의미합니다. 우리 포인터 - 당신이 "0 개 이상"을 정량화하고 있기 때문에 문제가되지 않습니다, 당신이 볼 수 있듯이

    enter image description here

    , 아니 단어 문자가 일치되지 않지만 :

    그래서이 경기가 될 것입니다 구문의 해당 부분을 건너 뛰고 이미 단어 경계를 설정하는 것이 가능합니다.

    대신 *+으로 변경할 수 있습니다. 또한

    읽기 : 그것은 단지 당신의 문자열의 a 일치

    +0

    +1, 당신은 더 빠를뿐만 아니라 대답이 OP 문제를 더 잘 설명합니다. –

    +0

    "*"을 "+"로 변경해 주셔서 감사합니다! 실제로 a를 단어로 매치했습니다. 왜냐하면 "^"는 단어의 끝이라고 생각하기 때문입니다. – Jamie

    1

    .

    a은 단어 문자이고 ^은 단어 문자가 아니기 때문에 빈 문자열은 단어 경계를 정의합니다. (\b의 경우)

    a은 위에서 언급 한 단어 경계로 바로 이어지기 때문에 a과 일치합니다. 그 이유는 *이 선행 토큰의 0 개 이상의 문자와 일치하기 때문입니다.

    here을 참조하십시오.

    x이 0 개 이상의 토큰 대신 1 개 이상의 토큰이되어야하는 경우에 따라 \ba\w+\b으로 변경해야합니다.

    +4

    'a'는 단어 문자이고'^'는 단어 문자가 아니기 때문에 그들 사이의 빈 문자열은 단어 경계를 정의합니다. – nhahtdh

    +0

    @nhahtdh 답변에이를 편집 할 수 있습니까? –

    +0

    @PhilippM : 진행하십시오 – nhahtdh

    1

    문제는 Regexp에 없습니다. 성공에 대한 해석입니다. 정규 표현식은 "a"와 만 일치하지만 여전히 일치하고 성공할 것입니다.

    +0

    방금 ​​알아 봤지만이 경우 특수 문자 (이 경우 "^"는 단어의 끝으로 간주됩니다.)가 일치하지 않을 것입니다. used :^het begin에서 $ 정규 표현식의 끝에서 다음 잘 작동합니다. – Jamie

    관련 문제