정규식을 사용하여 동일한 연속 문자가 포함된 3개 이상의 단어를 포함하는 모든 줄을 찾습니다.

정규식을 사용하여 동일한 연속 문자가 포함된 3개 이상의 단어를 포함하는 모든 줄을 찾습니다.

일치하는 줄의 예는 다음과 같습니다. GuTT어, 루BBing, 유목민, 가운데, Nit, Tu₩₩잠깐, 예인선

이 줄에는 3개의 단어가 포함되어 있으며, 모두 2개의 동일한 문자가 연속되어 있습니다.

현재 다음 정규식 및 grep -P 명령을 사용하고 있습니다 (?:.*(?:(\w)\1).*){3}.

이 정규식은 작동하지만 다음 줄이 있는 경우: Gutter, Rutting, Nomad, Among, Nit, Turret, Tugekekekekekekekekekekekeregex101.com에서 심각한 역추적 오류가 발생합니다(https://regex101.com/r/3YFCAj/1).

역추적 문제 없이 이 정규식을 검색하려면 어떻게 해야 합니까?

답변1

스타일 정규식을 사용하려면 Perl다음과 같이 하면 됩니다.

(\b\w*(\w)\2\w*\b.*){3}

설명하다:

  • (\w)\2두 개의 동일한 연속 문자를 일치시킵니다. \2두 번째로 일치하는 그룹, 즉 (\w)그 이전 그룹 과 일치 합니다 .
  • \w*(\w)\2\w*이러한 문자는 단어 내에 있어야 하며 다른 단어 문자 앞에 및/또는 뒤에 있어야 합니다.
  • \b\w*(\w)\2\w*\b- 이 단어는 단어 경계로 둘러싸여 있어야 합니다.
  • .*- 각 단어 뒤에는 다른 문자가 올 수 있습니다.
  • (\b\w*(\w)\2\w*\b.*){3}- 이 마지막 부분을 3번 반복해야 해당 단어를 3개 이상 찾을 수 있습니다.

관련 정보