Translate

2019년 4월 6일 토요일

[Regex] 정규표현식 AND 연산 사용방법





이전에 [Regex] 정규표현식 고급기능 소개 글을 올렸었는데..

최근 lookahead 기능을 이용하여 정규식 AND 연산을 사용할 일이 있어서 다시 정리를 해본다.
이렇게까지 정규식이 가능한걸 보고 정말 왠만한 패턴매칭이 다 되겠구나 싶다.



문자열 중 두개의 단어를 모두 포함하는경우 조건을 만족하려면 아래와 같이 하면 된다.
1004lucifer
 (?=.*단어)(?=.*단어).*

예제 보기 - https://regexr.com/4boo7







매칭되는 원리

1. lookahead 기능은 아래와 같이 해당 단어를 제외한 앞의 문자열을 패턴매칭한다.




2. 매칭된 상황에서 뒤에 매칭되는 패턴을 붙이면 아래와 같이 단어를 포함하여 매칭이 가능하다.
1004lucifer



3. 앞뒤에 .* 를 붙이게되면 문자열의 처음부터 마지막까지 단어가 들어간 모든 문자열이 대상이 된다.




4. 위의 패턴은 아래와 같이 바꿀 수 있다.




5. 문자열의 처음부터 끝까지 단어가 있는 조건을 두개 붙이면 아래와 같이 완성이 된다.






PS.
3번과 4번은 도출되는 결과가 같지만 엄밀히 말하자면 똑같은 패턴은 아니다.
3번의 경우 첫글자부터 단어의 앞글자 까지 매칭이 되지만
4번의 경우 첫글자부터 패턴이 매칭이 되지만 앞의 모든 글자에 대해서 각각 따로 매칭이 된다.
이 때문에 lookahead를 이용해서 AND 연산이 가능한 것이다.
1004lucifer
1004lucifer



참고
 - https://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator


댓글 없음 :

댓글 쓰기