자바에서 .jsp/.jspx 확장자가없는 문자열을 검색하려고하는데 부정적인 선견문 패턴으로는 많은 어려움을 겪고 있습니다. 문자열의 무리 감안할 때음수 Lookahead 정규 표현식을 올바르게 일치시키지 못함
:
String string1 = "templateName";
String string2 = "some/path"
String string3 = "basic/filename/no/extension"
String string4 = "some/path/to/file.jsp"
String string5 = "alternative/path/to/file.jspx"
내가 처음 3과 일치하는 정규식을 찾을려고하지 나는 부정적 예측과 정규식을 생각 했을까 지난 2
작동 할 것이다.
예는 :
Pattern p = new Pattern.compile("(.+)(?!\\.jsp[x]?)")
하지만 그 패턴은 위의 모든 문자열과 일치하는 것 같다. 나는 처음에 그룹 1이 너무 욕심을 느꼈으므로 (. +?) 시도했지만 너무 도움이되지는 않는다고 생각했습니다.
이 SO Post은 부정적 예측을 설명하는 매우 훌륭한 역할을하지만 불행히도 올바른 조합을 찾지 못하는 것입니다.
나는 분명한 뭔가를 놓치고 있습니까?
귀하의 패턴은 말한다 : NG, 당신은 문자열 $
참조의 말 뒤에 찾고있는 더 .jsp로 또는 .jspx
없다 .jsp 또는 .jspx가 바로 뒤 따르지 않는 _any_ 비어 있지 않은 문자 시퀀스를 찾으면 일치합니다. " 그래서'/ path/to/file.jsp'와 일치 할 것입니다.'s','so' 또는 마지막 슬래시를 포함하지 않는 한 무엇이든 일치 할 수 있기 때문입니다. anubhava의 대답을보십시오. 두번째는'.jsp [x]'가 문자열의 끝에 오는 경우 문자열의 시작 뒤에'.jsp [x]'가 오는 비어 있지 않은 문자 시퀀스가 뒤따라 올 경우 부정적인 lookahead를 사용합니다.). – ajb