일치하는 줄의 예는 다음과 같습니다. GuTT어, 루BBing, 유목민, 가운데, Nit, Tu₩₩잠깐, 예인선
이 줄에는 3개의 단어가 포함되어 있으며, 모두 2개의 동일한 문자가 연속되어 있습니다.
현재 다음 정규식 및 grep -P 명령을 사용하고 있습니다 (?:.*(?:(\w)\1).*){3}
.
이 정규식은 작동하지만 다음 줄이 있는 경우: Gutter, Rutting, Nomad, Among, Nit, Turret, Tugekekekekekekekekekekeke
regex101.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개 이상 찾을 수 있습니다.