헤르메스 LIFE

[정규식] Java에서의 정규식 정리 본문

Core Java

[정규식] Java에서의 정규식 정리

헤르메스의날개 2016. 3. 25. 09:39
728x90


정규식 특수문자 처리

1. []으로 싸줘야하는 문자

 * → [*]

 + → [+]

 $ → [$]

 | → [|]

 

2.추가 해야하는 문자

 ( → \\(

 ) → \\)

 { → \\{

 } → \\}

 ^ → \\^

 [ → \\[

 ] → \\]


3. 자바의 특수문자는 \을 쓴다.

" → \"


4.무관한 특수 문자

 ! # % & @ ` : ; - . < > , ~ ' 


Pattern 플래그

Pattern.CANON_EQ

 Match 시에 두 문자가 반영된다. 예를 들어, 수식 ‘\u003F’ 는 ‘?’ 와 match 된다.

Pattern.CASE_INSENSTIVE (?i)

 대소문자 구분 없이 패턴을 match시킨다. US-ASCII 코드의 문자를 기준하지만, 이것과 함께 UNICODE_CASE 플래그를 지정하면 유니코드의 대소문자 구분 없는 match 가 가능하다.

Pattern.COMMENTS (?x)

 Whitespace가 무시되고, #으로 시작하는 주석이 무시된다 (라인의 끝까지).

Pattern.DOTALL (?s) 

→ 수식 ‘.’ 이 모든 문자와 match 되며, 한 라인의 끝을 나타내는 ‘\n’ 도 match 에 포함된다.

Pattern.MULTILINE (?m)

→ 수식 ‘^’ 는 라인의 시작과, ‘$’ 는 라인의 끝과 match 된다. 또한 ‘^’ 는 입력 문자열의 시작과, ‘$’ 는 입력 문자열의 끝과 match 된다. 원래 이 수식들은 입력 문자열 전체의 시작과 끝하고만 match 된다.

Pattern.UNICODE_CASE (?u)

→ 유니 코드를 ㅣ준으로 대소문자 구분 없이 match 시킨다. 대소문자 구분 없이 match하는 것은 원래 US_ASCII 문자 코드를 기준으로 한다.

Pattert.UNIX_LINES (?d)

→ 수식 ‘.’ 과 ‘^’ 및 ‘$’ 의 match 시에 한 라인의 끝을 의미하는 ‘\n’(newline) 만 인식된다.



// script 처리 

Pattern script = Pattern.compile("<(no)?script[^>]*>.*?</(no)?script>",Pattern.DOTALL);  

mat = script.matcher(str);  

str = mat.replaceAll("");  

// style 처리

Pattern style = Pattern.compile("<style[^>]*>.*</style>",Pattern.DOTALL);  

mat = style.matcher(str);  

str = mat.replaceAll("");  

// tag 처리 

Pattern tag = Pattern.compile("<(\"[^\"]*\"|\'[^\']*\'|[^\'\">])*>");  

mat = tag.matcher(str);  

str = mat.replaceAll("");  

// ntag 처리 

Pattern ntag = Pattern.compile("<\\w+\\s+[^<]*\\s*>");  

mat = ntag.matcher(str);  

str = mat.replaceAll("");  

// entity ref 처리

Pattern Eentity = Pattern.compile("&[^;]+;");  

mat = Eentity.matcher(str);  

str = mat.replaceAll("");

// whitespace 처리 

Pattern wspace = Pattern.compile("\\s\\s+");  

mat = wspace.matcher(str); 

str = mat.replaceAll(""); 



728x90