작동하려면 다음 정규 표현식을 가져와야하지만 문제가 있습니다. 예, 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/에 사용했기 때문에 해당 엔진에 버그가있을 수 있지만 실제 환경에서는이 문제를 재현 할 수 있습니다.
'test (. *) '가 문제입니다. 어쩌면'test ([^ \ /] *)'여야할까요? 그것이 그렇듯이, 그것은'test.com/sch'과'/'와 일치하고''Zhello''에's'가 없으므로 계속됩니다. – Shef
당신은 선생님입니다. 그것은 그것을 고쳤다. 나는 여전히 ungreedy (. *)가 첫 번째 "/"에서 멈추지 않을 이유를 이해하지 못합니다. (실제로, 그 다음에 아무 것도 없을 때 ...), 나는 그 것을 떠날 것입니다. 더 많은 학자들에게. 덧붙여 말하자면,이 수정으로 인해 미리보기 헤드도 작동합니다. 고맙습니다! – FoulFoot
위대한, 나는 대답으로 그것을 게시 할 것이고 당신은 당신의 질문을 해결 된 것으로 표시 할 수있다. – Shef