Regex에서 다른 문자열 앞에 문자열이 나타나는 경우 검색을 중지하는 방법

Regex에서 다른 문자열 앞에 문자열이 나타나는 경우 검색을 중지하는 방법

나는 정규식, 특히 고급 정규식(뒤를 보거나 앞을 보거나)을 처음 사용합니다.

두 줄이 있는데,

  1. 공이 빨간색 가방에 있거나 녹색 가방에 있으면 공을 선택하세요.
  2. 공이 녹색 가방에 있거나 빨간색 가방에 있으면 공을 선택하세요.

1번째 '가방' 앞에 줄이 빨간색이어야만 매치를 하고 싶었어요. 그리고 첫 번째 'bag' 다음에 줄이 빨간색이면 일치하지 않습니다(따라서 2가 아닌 1과 일치).

다음 정규식을 사용하면

sort.+?red(?!bag)

또는

sort.+?(?!bag)red

두 경우 모두 여전히 라인 2와 일치하는 것 같습니다.

힌트/답변을 보내 주시면 감사하겠습니다.

답변1

이것은 작업을 수행합니다.

^(?:(?!\bbag\b).)*\bred\b.+?\bbag\b

설명:

^               # beginning of line
                # tempered greedy token
  (?:           # start non capture group
    (?!         # negative lookahead
      \bbag\b   # "bag" surrounded with word boundary, not matching bags or airbag
    )           # end lookahead
    .           # any character
  )*            # end group, may appear 0 or more times
  \bred\b       # "red" surrounded with word boundary, not matching tired or redition
  .+?           # 1 or more any character, not greedy
  \bbag\b       # "bag" surrounded with word boundary

데모

관련 정보