2013-02-28 4 views
1

작동하려면 다음 정규 표현식을 가져와야하지만 문제가 있습니다. 예, HTML을 구문 분석합니다. 아니요, 더 좋은 옵션은 없습니다. 정규식 음수 문자 클래스 및 점 별표

은 정규식 :

test(.*)\/[^s].*(=|\/|Z) 

나는 "U"수정을 사용하고 있습니다 (그래서 ungreedy이다), 및 "\"는 나의 탈출 상징이다.

이 패턴에 꽂으 : 나는 그것이한다고 생각하지 않습니다 경기에서

test.com/sch/anythingwhateverZhello 

결과. 캡처는 ".com/sch"및 "Z"이며, A)는 첫 번째 "/"까지만 캡처해야하므로 ".com"이어야하고 B) "/"다음의 첫 번째 문자가 "s"이면 일치하지 않습니다. 흥미롭게도 - 내 문제의 가능한 원인 -은 [^ s]을 (를) 제거하면 캡처가 올바르게 작동합니다. 그 안에는 별표가 두 번째 "/"까지 올라와있어 아무 의미가 없습니다. 별표 뒤에 물음표를 넣으려고했는데, 정규식에 대한 두 번 힌트처럼 욕심을 느끼지 않아도되지만 아무런 차이가 없습니다.

OK (정말 그냥 "s"를 제외하고 싶지 않아, 난 정말 특히 "SCH"를 제외 할) 그래서 대신 부정 문자 클래스, 나는 옆에 부정적 예측했습니다 :

test(.*)\/(?!sch).*(=|\/|Z) 

같은 문제가 발생했습니다. 일치, 첫 번째 캡처는 ".com/sch"입니다.

내 실수는 무엇입니까? RexV2 regex 유효성 검사기를 http://www.rexv.org/에 사용했기 때문에 해당 엔진에 버그가있을 수 있지만 실제 환경에서는이 문제를 재현 할 수 있습니다.

+1

'test (. *) '가 문제입니다. 어쩌면'test ([^ \ /] *)'여야할까요? 그것이 그렇듯이, 그것은'test.com/sch'과'/'와 일치하고''Zhello''에's'가 없으므로 계속됩니다. – Shef

+1

당신은 선생님입니다. 그것은 그것을 고쳤다. 나는 여전히 ungreedy (. *)가 첫 번째 "/"에서 멈추지 않을 이유를 이해하지 못합니다. (실제로, 그 다음에 아무 것도 없을 때 ...), 나는 그 것을 떠날 것입니다. 더 많은 학자들에게. 덧붙여 말하자면,이 수정으로 인해 미리보기 헤드도 작동합니다. 고맙습니다! – FoulFoot

+0

위대한, 나는 대답으로 그것을 게시 할 것이고 당신은 당신의 질문을 해결 된 것으로 표시 할 수있다. – Shef

답변

0

test(.*) 문제가 있습니다. 어쩌면 테스트해야합니다 ([^ /] *)?

.는 모든 문자를 의미하기 때문에, 그것은, test.com/sch 일치하는 것입니다 방법, 다음 /과는 다음가는 계속 그래서 anythingwhateverZhello에는 s이 없습니다.