Thursday, July 31, 2008

[Regex] '/x' option

Mastering perl에서...




Regex에서 '/x' option은 regex 의 패턴 안의 모든 공백, new line을 무시한다.
즉, regular pattern / / 사이의 expression에 대해 '\S' 와 매치되지 않는 다른 모든 것들을 substitution 한 것과 같은 상태로 패턴을 찾는다.


$string='what is this';
$string=~/w h a t/x;


/x 옵션 없이는 위의 regex과 매치된느 것이 없지만, /x 옵션이 'w h a t' 사이의 공백을 무시하기 때문에 위의 regex은 'what' 과 매치된다.

이런 특성을 이용하면 regex이 길고 복잡한 경우 regex을 readable 한 형태로 깔끔하게 표현할 수 있다.

$string=~/(\s+)\s+\d{3,8}(\.\,)\d{2}\w+\W\n/; 와 같은 복잡하고 알아보기 힘든 정규식이 아래와 같이 읽기 용이한 ( 여전히 복잡해 보이기 하지만 ) 형태로 바뀌어질 수 있다.

$string=~/(\s+)\s+

\d{3,8}
(\.\,)
\d{2}
\w+\W
\n
/x;