itsource

Java RegEx는 대소문자를 구분하지 않습니까?

mycopycode 2022. 9. 14. 22:28
반응형

Java RegEx는 대소문자를 구분하지 않습니까?

Java에서는 replaceAll을 실행하여 다음과 같은 정규식 패턴을 찾습니다.

replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1"); 

(대소문자를 구분하지 않는 중복된 단어를 삭제합니다.테스트 테스트)를 어디에 두었는지 잘 모르겠습니다.?i처음에 있어야 한다고 읽었는데, 빼면 대소문자를 구분하지 않는 단어(테스트 테스트 등)가 아니라 연속되는 단어가 중복됩니다.그래서 처음에는 ?i를 추가할 수 있을 것 같았는데, 그렇게 하면 일이 잘 되지 않는 것 같습니다.무슨 생각 있어?감사합니다!

대소문자를 구분하지 않는 정규식을 대조하여 패턴을 사용하여 읽기 쉽게 만들 수도 있습니다.Case_Insensitive 상수:

Pattern mypattern = Pattern.compile(MYREGEX, Pattern.CASE_INSENSITIVE);
Matcher mymatcher= mypattern.matcher(mystring);

RegexBuddy는 처음에 포함시킬 경우 다음 구문이 올바르다고 합니다.

"(?i)\\b(\\w+)\\b(\\s+\\1)+\\b"

예. Java regex에서는 대소문자를 구분하지 않고 자유롭게 활성화 또는 비활성화할 수 있습니다.

다음과 같은 것을 원하는 것 같습니다.

    System.out.println(
        "Have a meRry MErrY Christmas ho Ho hO"
            .replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
    );
    // Have a meRry Christmas ho

삽입Pattern.CASE_INSENSITIVE 플래그는 다음과 같습니다.(?i)것은 아니다.\?i또, 1개의 불필요한 것에도 주의해 주세요.\b패턴에서 제거되었습니다.

(?i)는 패턴의 선두에 배치되어 대소문자를 구분합니다.이 경우 패턴의 후반부에 덮어쓰지 않기 때문에 패턴 전체가 대소문자를 구분하지 않습니다.

실제로 대소문자를 구분하지 않고 전체 패턴의 일부만 사용할 수 있습니다.따라서 어디에 배치할지에 대한 문제는 사양에 따라 달라집니다(이 특정 문제의 경우, 그 이후로는 문제가 되지 않습니다만).\w대소문자를 구분하지 않습니다.

예를 들어 다음과 같은 일련의 문자를 접는 유사한 예를 보여 줍니다."AaAaaA"딱 맞게"A".

    System.out.println(
        "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
            .replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
    ); // A e I O u

이제 실행이 대문자로 시작하는 경우에만 축소되도록 지정했다고 가정합니다.그럼 우린 이걸 넣어야 해(?i)적절한 장소:

    System.out.println(
        "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
            .replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
    ); // A eeEeeE I O uuUuUuu

일반적으로 패턴 내의 모든 플래그를 원하는 대로 활성화 또는 비활성화할 수 있습니다.

「 」를 참조해 주세요.

관련 질문

표현식 전체가 대소문자를 구분하지 않는 경우 플래그를 지정할 수 있습니다.

Pattern.compile(regexp, Pattern.CASE_INSENSITIVE)

패턴 매칭을 확인하는 첫 번째 문자열을 소문자로 유도할 수도 있습니다.패턴에 각각 소문자 기호를 사용합니다.

언급URL : https://stackoverflow.com/questions/3436118/is-java-regex-case-insensitive

반응형