예, 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
. \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
보다 일반적으로 원하는대로 패턴 내에서 플래그를 활성화 및 비활성화 할 수 있습니다.
또한보십시오
관련 질문