답변:
필요한 정규식은 /(.)\1{9,}/
입니다.
테스트:
#!perl
use warnings;
use strict;
my $regex = qr/(.)\1{9,}/;
print "NO" if "abcdefghijklmno" =~ $regex;
print "YES" if "------------------------" =~ $regex;
print "YES" if "========================" =~ $regex;
여기서는 \1
역 참조라고합니다. 이 점에 포착되는 것을 참조 .
괄호 사이에 (.)
다음이 {9,}
구 이상의 같은 문자의 요청합니다. 따라서 이것은 10 개 이상의 단일 문자와 일치합니다.
위의 테스트 스크립트는 Perl에 있지만 이것은 매우 표준적인 정규식 구문이며 모든 언어에서 작동합니다. 일부 변형에서는 더 많은 백 슬래시를 사용해야 할 수 있습니다 \(.\)\1\{9,\}
. 예를 들어 Emacs는 여기에 작성 합니다.
전체 문자열이 9 개 이상의 동일한 문자로 구성되어야하는 경우 패턴 주위에 앵커를 추가합니다.
my $regex = qr/^(.)\1{9,}$/;
Python에서는 다음을 사용할 수 있습니다. (.)\1{9,}
예:
txt = """1. aaaaaaaaaaaaaaa
2. bb
3. cccccccccccccccccccc
4. dd
5. eeeeeeeeeeee"""
rx = re.compile(r'(.)\1{9,}')
lines = txt.split('\n')
for line in lines:
rxx = rx.search(line)
if rxx:
print line
산출:
1. aaaaaaaaaaaaaaa
3. cccccccccccccccccccc
5. eeeeeeeeeeee
.
모든 문자와 일치합니다. 이미 언급 된 중괄호와 함께 사용됩니다.
$: cat > test
========
============================
oo
ooooooooooooooooooooooo
$: grep -E '(.)\1{10}' test
============================
ooooooooooooooooooooooo
grep -E '([=o])\1{10}' test
과 grep -E '([=o]){10}' test
당신의 예와 작품 벌금 (의 부족주의 \1
두 번째 명령을). 그러나 명령 grep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='
이 줄과 일치하지 않습니다! 그러나없는 명령 \1
은 다음 줄과 일치합니다 grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o==='
.. 설명해 주시겠습니까? 건배;)
{10,} 연산자를 사용하십시오.
$: cat > testre
============================
==
==============
$: grep -E '={10,}' testre
============================
==============
PowerShell을 사용 하여 단어 또는 문자 표현을 빠르게 바꿀 수도 있습니다 . PowerShell은 Windows 용입니다. 현재 버전은 3.0입니다.
$oldfile = "$env:windir\WindowsUpdate.log"
$newfile = "$env:temp\newfile.txt"
$text = (Get-Content -Path $oldfile -ReadCount 0) -join "`n"
$text -replace '/(.)\1{9,}/', ' ' | Set-Content -Path $newfile
PHP의 preg_replace
예 :
$str = "motttherbb fffaaattther";
$str = preg_replace("/([a-z])\\1/", "", $str);
echo $str;
여기 [a-z]
에서 문자 ()
를 \\1
친 다음 다른 동일한 문자와 일치시키려는 역 참조 와 함께 사용할 수 있습니다 (이미 연속 된 2 개의 문자를 대상으로 함).
어머니 아버지
그랬다면 :
$str = preg_replace("/([a-z])\\1{2}/", "", $str);
3 개의 연속 된 반복 문자를 지우고 다음을 출력합니다.
그녀를 모 허브
={10,}
=
10 회 이상 반복되는 일치 .