정규식은 거의 발생하지 않으며 마지막 2줄 일치가 필요합니다.

정규식은 거의 발생하지 않으며 마지막 2줄 일치가 필요합니다.

요청과 일치하는 마지막 2줄만 출력하는 정규식을 만들려고 합니다. 몇 줄이 포함된 로그 파일이 있는데 다음을 사용하여 마지막 2줄을 확인하고 싶습니다.

첫 번째 줄: "4bccf" 및 "Media"

두 번째 줄 : "Live" 및 "4bccf" 및 "my"

나는 그것에 대해 하나의 정규식을 만들었습니다. ((?=.*\b4bccf\b)(?=.*\bMedia\b)|(?=.*\bLive\b)(?=.*\b4bccf\b)(?=.*\bmy\b))

작동하지만 ("4bccf" 및 "Media")가 포함된 모든 줄 + ("Live" 및 "4bccf" 및 "my")가 포함된 모든 줄이 인쇄됩니다.

나는 각각의 마지막 줄만 얻고 싶습니다. 하나의 정규식에서만 그렇게 할 수 있습니까?

아이디어가 있다면 매우 관심이 있습니다. 감사합니다.

답변1

다음은 작업을 수행하는 복잡한 정규식(PCRE 버전)이지만, 선호하는 스크립트 언어로 스크립트를 작성하는 것이 좋습니다. 훨씬 더 유지 관리가 용이해질 것입니다!

메모:/x나는 주석을 허용하고 공백을 처리하지 않는 플래그를 사용했습니다 . 이는 가독성에 매우 유용합니다 ;-). 정규식 버전이 이를 지원하지 않는 경우 공백과 줄바꿈을 모두 제거하세요.

^                                   # beginning of line
  (?=.*\b4bccf\b)                   # lookahead, make sure we have 4bccf in the line
  (?=.*\bMedia\b)                   # lookahead, make sure we have Media in the line
  (.+)                              # group 1, the whole line
  $                                 # end of line
  (?=                               # lookahead, make sure we have after:
    (?:                                 # non capture group
      (?!                               # negative lookahead, make we haven't after:
        (?=.*\b4bccf\b)                     # lookahead, make sure we have 4bccf in the line
        (?=.*\bMedia\b)                     # lookahead, make sure we have Media in the line
      )                                 # end lookahead
      [\s\S]                            # any character, including linebreak
    )*                                  # end group, may appear 0 or more times
    \z                                  # end of file
  )                                 # end lookahead
|                                 # OR
^                                   # same description as above for the other words to check
  (?=.*\bLive\b)
  (?=.*\b4bccf\b)
  (?=.*\bmy\b)
  (.+)
  $
  (?=
    (?:
      (?!
        (?=.*\bLive\b)
        (?=.*\b4bccf\b)
        (?=.*\bmy\b)
      )
      [\s\S]
    )*
    \z
  )

데모 및 설명

관련 정보