Java 정규식으로 긴 문자열 내에서 동일한 형식의 하위 문자열을 어떻게 grep 할 수 있습니까?

신 야오

예를 들어, 나는 다음 /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;
    }

내가 여기서 뭘 잘못하고 있니? 감사!

Wiktor Stribiżew

정규식 \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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관