Translate

2019년 6월 16일 일요일

[Regex] 정규표현식 특정 문자열 포함하지 않는 매칭 방법





특정 문자열이 들어있는 라인을 제외하고 어떻게 문자열을 추출할 수 있을까 하다가 알아보았다.



특정 문자열이 포함되지 않게 매칭하는 방법은 아래와 같다.
1004lucifer
 ^((?!단어).)*$






복수개의 단어에 대해서 문자열을 제외하고 싶다면 다음과 같이 할 수 있다.
1004lucifer
 ^((?!단어|단어).)*$



1004lucifer


복수개의 단어가 동시에 없어야 한다면 다음과 같이 할 수 있다.
(이 방법은 지난번 링크-정규표현식 AND 연산 사용방법 을 응용해 봤다.)

 ^((?!(?=.*단어)(?=.*단어)).)*$
 ^((?!(?=.*단어)(?=.*단어)(?=.*단어)(?=.*단어)).)*$









매칭되는 원리

1. negative lookahead 를 이용하면 해당 단어와 일치하지 않은 단어의 앞에있는 문자열이 매칭된다.


1004lucifer


2. 해당 매칭문자열에 점(.) 하나 붙여서 글자를 하나더 추가 매칭이 가능





3. 해당 문자열 앞에 단어 대신 시작(^)을 붙여서 해당 문자열로 시작되지 않는것만 매칭





4. 그룹화를 해서 해당 문자열 제외한 앞에까지 모두 매칭





5. 마지막까지 모두 매칭되면 추출 완료


정규식

참고
 - https://stackoverflow.com/questions/406230/regular-expression-to-match-a-line-that-doesnt-contain-a-word



댓글 없음 :

댓글 쓰기