한국에서 프로그램을 하다보면, 한글로 된 리소스(문자)들을 영문으로 바꾸거나,
입력한 글자중에 한글이 있는지 찾는 로직이 필요할때가 있습니다.
정규식(Regular Expression)을 이용한 방법을 사용하면, 빠르게 찾을 수 있고 유용합니다.
(정규표현식 설명: https://wikidocs.net/46744)
정규식 관련 설명 사이트
http://kio.zc.bz/Lecture/regexp.html
- 나는 blah 직원입니다.ㅋㅋⓥ
한글 관련 핵심요소
[한글만 찾기] ==> [가-힣ㄱ-ㅎㅏ-ㅣ] ==> [\\u3131-\\u318E\\uAC00-\\uD7A3]
[한글만 빼고] ==> [^가-힣ㄱ-ㅎㅏ-ㅣ]
[펌] Java에서 한글을 정규식으로 찾기
처음에는 [^가-힣ㄱ-ㅎㅏ-ㅣ] 형태로 한글을 범위로 해서 찾았는데,
이렇게 하니 윈도우 기반 로컬 머신에서는 잘 동작하던 모듈이 linux 머신에서는 동작하지 않았다.
다른점을 살펴보니 linux 머신은 utf-8 기반이였고, 한글 정규표현식이 다르게 동작하는 것으로 보였다.
그래서
현재는 [^\\u3131-\\u318E\\uAC00-\\uD7A3] 와 같이 유니코드로 범위를 표시해서 한글 이외의 문자를 제거하고 있다.
Java가 내부적으로 UTF-16을 사용하는 것으로 알고 있는데 정규표현식에서 서로 다르게 동작할 수 있다는 사실을 처음 알게 됐고,
이렇게 해결하긴 했지만 동작 원리를 정확히 이해하지는 못하고 있다.
(?u)[^가-힣ㄱ-ㅎㅏ-ㅣ] 이렇게 유티코드 옵션을 주고 실행해도 정상 동작하지 않는다.
찾아보니 UNICODE_CASE 일 때 범위 표현은 사용할 수 없다고 한다.
또 하나 고민은 (</?[bB][rR][ ]*/?>|</?[pP]/?>|</?[dD][iI][vV]/?>|</?[lL][iI]/?>|</?[tT][dD]/?>) 와 같은 형태로 html 태그 중에서 단락을 구분지어 주는 태그를 약속된 구분자로 치환하려는데 이때 2가지 문제가 발생한다.
첫번째는 분석하려는 본문이 길 때 치환에 시간이 많이 걸린다는 것이고,
또 하나는 가끔 StackOverflowError가 발생한다.
검색을 해보니 복잡한 정규표현식이나 분석하려는 대상이 길 때 발생할 수 있고 해결되지 않은 문제라고 한다.
정규 표현식을 좀 더 명확하고 단순하게 개선하면 에러 발생을 줄일 수 있다는데 어떻게 하면 될까
우선은 (?i)(</?br */?>|</?p/?>|</?div/?>|</?li/?>|</?td/?>) 대소문자 구분을 하지 않게 하고 필요 없는 표현을 제거했다.
실행 속도는 거의 변화가 없고 StackOverflowError가 줄어들지는 지켜봐야 한다.
(회사 동료분의 힌트로 다시 한번 수정. 현재는 (?i)</?(br *|p|div|li|td)/?> 형태로 더 간단해졌다.)
출처: http://fantazic.com/archives/513
유니코드(UTF-8)한글 코드표, 한글코드 범위{AC00-D7AF}
출처 : http://sexy.pe.kr/tc/113?category=2
전체 코드표: http://titus.uni-frankfurt.de/unicode/unitestx.htm
정규식을 이용하다보니 한글부분 매치시킬때 한글코드 범위가 유용하게 활용되더라구요.
필요하신분 참고하세요~
Editplus에서 사용한 하기
여러 파일 찾기 >>
찾을 말(I): [가-힝ㄱ-ㅎ ㅏ-l]
'JAVA' 카테고리의 다른 글
BlueJ - 자바를 시작하는 사람을 위한 Java 개발자 도구 (무료) (0) | 2018.09.22 |
---|---|
[펌]jsp을 이용해서 쓰레드 덤프 보기 (0) | 2011.03.28 |
이클립스(eclipse) 실행오류 ( Failed to create the Java Virtual Machine. ) (0) | 2010.09.30 |
Java의 class파일 역컴파일 jad.exe (0) | 2010.07.29 |
Totoise SVN Cache(TSVNCache.exe)부화 줄이기 (1) | 2010.01.27 |
[펌][Eclipse] Eclipse 실행 시 오류 (0) | 2009.05.15 |
[펌]이클립스 설정 (0) | 2009.05.07 |
[펌] 이클립스 단축키 (0) | 2009.04.16 |
(로그인하지 않으셔도 가능)