Translate

[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



댓글

  1. 포스팅 감사히 잘 봤습니다! 포스팅을 응용해서 작업을 하려고 하는데 질문이 있어 댓글 남겨요!

    아래 링크에 질문을 정리해봤어요.
    이와 같은 경우 어떻게 정규식을 작성해야 할지 배우고 싶습니다.

    https://regexr.com/5sis3

    감사합니다!

    답글삭제
    답글
    1. 아마 이런걸 원하시는것 같네요~ㅎㅎ

      https://regexr.com/5sji4

      삭제

댓글 쓰기