정규식 패턴 매칭 플래그
매칭 플래그
예전회사에서 유용하게 사용했던 정규식중에 특수문자를 제거하는 방식이 있다.
예를들어 xml 주석을 제거하고싶다 하면xml.replaceAll("(?s)<!--.*?-->","");
해당 방식을 사용할때 (?s)가 정확히 무엇인지 알수가 없었는데 이번 특정 Unicode를 제거하는 업무를 진행하면서
매칭 플래그
라는 이름으로 사용된다는것을 알 수 있었다.
종류
여러개의 플래그를 사용할 때는 | 연산자로 연결한다. 플래그를 정규식의 맨 앞에 명시해야한다.
Pattern.CANON_EQ None 표준화된 매칭 모드를 활성화합니다. 이 모드가 켜지면 a를 나타내는 유니코드 "\u00E5"와 a와 상단고리 유니코드를 쓴 "a\u030A"를 같다고 매칭합니다.
Pattern.CASE_INSENSITIVE (?i) 대소문자를 구분하지 않습니다.
Pattern.COMMENTS (?x) 공백과 주석이 무시됩니다. 주석은 #부터 그 행 끝까지 입니다.
Pattern.MULTILINE (?m) 다중행 모드를 사용여 모든 ^와 $가 인식됩니다. 기본값은 입력값 전체를 하나의 시작과 끝으로 인식합니다.
Pattern.DOTALL (?s) .가 개행문자 까지 포함하는 모든 문자로 매칭됩니다.
Pattern.LITERAL None 입력의 메타문자와 이스케이프된 문자를 일반 문자로 취급합니다. CASE_INSENSITIVE와 UNICODE_CASE는 기능이 유지됩니다.
Pattern.UNICODE_CASE (?u) 이 모드가 활성화 되면 대소문자 매칭이 유니코드 표준을 따릅니다. 기본은 US-ASCII 문자 집합을 따릅니다.
Pattern.UNIX_LINES (?d) ^와 $를 처리시 UNIX 개행을 사용합니다.
예시
(?)로 사용할수 있는 플래그는 정규식에 직접 기입하면 되지만 None인 경우는 다음과 같은 방식으로 처리해야한다.
//Regular expression to find the required character
String regex = "["+ch+"]";
//Compiling the regular expression
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//Retrieving the matcher object
Matcher matcher = pattern.matcher(input);
int count =0;
while (matcher.find()) {
count++;
}
(?)로 사용할수 있는 플래그는 직접 명시
System.out.println("this\nis\ntest".replaceAll("(?s)(^.*$)", "B"));
System.out.println("this\nis\ntest".replaceAll("(?m)(^.*$)", "C"));
//Result
B // 개행 포함되어 B
C // 라인별로 \n을 포함한채로 치환하여 3라인
C
C
Author And Source
이 문제에 관하여(정규식 패턴 매칭 플래그), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mertyn88/정규식-패턴-매칭-플래그저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)