예를 들어, 나는 다음 /css/screen/shared/styles.css
과 /css/screen/nol/styles.css
같은 긴 문자열을 모두 grep하고 싶습니다 .
@import "/css/screen/shared/styles.css";
@import "/css/screen/nol/styles.css";
이 긴 문자열에는 두 줄이 포함되어 있으며 Java 코드에서 다음과 같이 표시되어야합니다.
String sentence = "@import \"/css/screen/nol/styles.css\";\n@import \"/css/screen/shared/styles.css\";";
지금까지 :
"@import\\s\"(.*?)\";\n"
"/css/screen/shared/styles.css"만 식별하고 "/css/screen/nol/styles.css"는 무시합니다.
내 코드는 다음과 같습니다.
public static String getImportCSS(String sentence){
String result = "";
if(sentence.length() == 0) return null;
if(sentence.indexOf("@import ") != -1){
Pattern regex = Pattern.compile("@import\\s\"(.*)\";");
Matcher regexMatcher = regex.matcher(sentence);
if(regexMatcher.find()){
for(int i = 0; i <= regexMatcher.groupCount(); i++){
result = regexMatcher.group(1);
}
}
return result;
}
return null;
}
내가 여기서 뭘 잘못하고 있니? 감사!
정규식 \n
의 끝에 LF ( ) 가 있으므로 두 번째 문자열을 일치시킬 수 없습니다 .
그것을 제거하면 패턴이 두 문자열을 모두 찾습니다. 그러나 문자열에 큰 따옴표가 포함되어서는 안되므로 지연된 점 일치보다는 부정 문자 클래스 [^"]*
( a 이외의 0 개 이상의 문자"
)를 사용하는 것이 좋습니다.
@import\s*\"([^"]*)\";
참고 항목 정규식 데모
자바 데모 :
String str = "@import \"/css/screen/shared/styles.css\";\n@import \"/css/screen/nol/styles.css\";";
Pattern ptrn = Pattern.compile("@import\\s*\"([^\"]*)\";");
Matcher matcher = ptrn.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다