정규표현식을 테스트해보거나 공부할 때 아래 두 페이지에서 많은 도움을 받았다.
정규표현식 엔진별로 되는게 있고 안되는게 있기 때문에 일부 제한은 있겠지만 기본적인 것은 무리가 없다.
<Site Link>
- 정규표현식을 시각화 해주는 사이트 : https://regexper.com/documentation.html
- 정규표현식을 연습할 수 있는 사이트 : http://regexr.com/
텍스트에서 대소문자 상관없이 'THE'라는 단어를 검색한다고 하면, (the|The|THE) 처럼 글자들을 쭉 나열해야 할 것이다.
그런데 패턴변경자라는 것을 사용하면 이를 쉽게 바꿀 수 있다. 주요 패턴변경자로는 아래와 같은 것들이 있다.
- i : 대소문자 구분없이 검색한다. [a-z]로 검색해도 [a-zA-Z]로 검색한 것 처럼 만든다.
- m : 텍스트를 다중 행으로 취급한다. ^$가 텍스트 전체의 끝이 아니라, 한 행의 끝으로 취급된다.
- s : 메타문자 '.'를 모든 문자에 매칭시킨다.
- x : 공백문자를 찾지 않고 무시한다.
(이 외에도 여러가지가 있는데, 이정도가 자주 쓰일 것 같아서 나머지는 기재하지 않았다.)
검색하는 패턴 앞에 (?패턴변경자)로 써주거나, ex) (?i)the
패턴 구분자 뒤에 붙여서 사용한다. ex) /the/i
위에 기재한 패턴변경자는 Java, perl, PCRE에서 모두 지원하지만 정규표현식의 다른 부분들도 그러하듯,
패턴변경자에 따라서는 언어나 엔진별로 되는게 있고 안되는게 있다.(사용법도 각각 가능여부가 다른 듯 하다.)
예를 들어, Linux에서 grep으로 정규표현식을 사용할때는 보통 확장정규표현식을 쓰는 grep -E '패턴' 텍스트명.확장자 꼴로 쓰는데,
여기에서 대소문자 구분없이 쓰려면 grep -Ei xxxx 처럼 grep 자체에 i옵션을 주어야 한다.
단, grep -P 를 사용하면 PCRE 표현식을 사용할 수 있으므로 grep -P '(?i)the' test.txt 와 같이 쓸 수 있지만
매뉴얼에도 적혀 있듯이, 아직까지는 실험적인 기능이다.
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression(PCRE).
This is highly experimental and grep -P may warn of unimplemented features.
StackOverFlow에도 grep -P 사용시 정규표현식은 맞는데 미스매치가 난다는 질문 글이 있다.
업그레이드 후 해결됐다는 글이 있는 걸로 보아, 아직은 사용할 단계가 아닌 듯.