2012-01-26 3 views
1

업데이트 : 나는 성냥 강조왜이 정규식은 아무 것도 일치하지 않습니까? (사용 RegExr 사이트)

내 테스트를 평가하는 this engine을 사용하고 있습니다 :

regex을 *
문자열 : BB의 AA에서 AA의 BAA
결과 : BB AA AA AAA (일치하지 않음)

regexA *
문자열 : AA AA의 BAA
결과 : AA AA의 BAA

regexA +
문자열 : BB의 AA에서 AA의 BAA
결과 : 왜 첫 번째 예에서 BB AAAA B AA

궁금 아니요 AA과 일치합니다. 두 번째 예에서 첫 번째 AA 만 일치하는 이유는 무엇입니까?

+0

우연히'^ A *'와 (*'면제하고 싶습니까?) 적용 할 플래그는 무엇입니까? –

+0

이 언어는 어떤 언어와 함께 사용됩니까? –

+0

어떤 종류의 정규식입니까? – nmichaels

답변

1

정말 regexr 사이트의 버그처럼 보입니다. regexbuddy를 사용하면 A *를 배치하여 모든 AA 시퀀스를 캡처하는 것을 볼 수 있습니다. - 무엇보다, BA에 대해 테스트하면 * 올바르게 문자열의 일부 (BAA) - 그래서 이것은 엔진이 도청 당했고 단순히 단일 char + * 토큰으로 작동하지 않는다고 믿게합니다.

EDIT : 면밀히 살펴보면 "글로벌"플래그가 켜져 있으므로 (모든 시퀀스와 일치하도록) regxr은 A* 시퀀스를 빨간색으로 처리하여 올바르게 처리 할 수 ​​없음을 나타냅니다. (아마도 길이가 0 인 문자열을 무한대로 매치하고자 할 것입니다).

0

당신은 당신의 정규식 전체 문자열을 비교하고 A*은 0 수락하거나 A, AA, 또는 AAAAAAAAAAAAAAAAAAAAAAAA 등의 수, 때문에. B으로 시작하므로 문장이 일치하지 않습니다.

두 번째 경우에만 첫 번째 AA은 공백이 있기 때문에 일치합니다. 정규식이 허용되지 않으므로 마지막 A가 발생한 후 선택이 중지됩니다.

1

A*은 0 개 이상의 A를 의미합니다. 문자열 ^의 물리게에

  1. 일치 0 길이 문자열을 문자열의 첫번째 문자부터 중지되어 B
  2. 일치 AA과 3 문자이기 때문에 중지 : 지금 당신은 다음과 같이 3의 경우 경기가 있어요 공백
  3. 1 개 이상의 A가 모두 일치합니다.

결론 : A* 대신 A를 그룹화하여 일치 시키려면 A+을 사용하십시오.

+0

첫 번째 매치 후에'A *'가 멈추지 만'A +'는 왜 안되는가? – Meysam

+0

'A *'는 첫 번째 경기 이후에 멈 춥니 다. 'A +'는 적어도 하나의'A '를 찾을 때까지는 일치 할 수 없지만, 탐욕스럽게 패턴을 끝내면 멈 춥니 다. – Phrogz

+0

내가 쓰려고했던 것에 답변 해 주신 @Phrogz에게 감사드립니다. A *는 A 매치를 성공적으로 매치 한 후에 멈추지 만 A +는 적어도 1 A를 찾아야 만합니다. – anubhava

관련 문제