Estou procurando uma expressão regular simples para corresponder ao mesmo caractere que está sendo repetido mais de 10 ou mais vezes. Por exemplo, se eu tiver um documento cheio de linhas horizontais:
=================================================
Ele corresponderá à linha de =
caracteres porque é repetido mais de 10 vezes. Observe que eu gostaria que isso funcionasse para qualquer personagem.
Respostas:
O regex de que você precisa é
/(.)\1{9,}/
.Teste:
Aqui, o
\1
é chamado de referência anterior. Ele faz referência ao que é capturado pelo ponto.
entre os colchetes(.)
e, em seguida,{9,}
pede nove ou mais do mesmo caractere. Portanto, isso corresponde a dez ou mais de qualquer caractere único.Embora o script de teste acima esteja em Perl, esta é uma sintaxe regex muito padrão e deve funcionar em qualquer idioma. Em algumas variantes, você pode precisar usar mais barras invertidas, por exemplo, o Emacs faria você escrever
\(.\)\1\{9,\}
aqui.Se uma string inteira deve consistir em 9 ou mais caracteres idênticos, adicione âncoras ao redor do padrão:
fonte
Em Python você pode usar
(.)\1{9,}
exemplo:
Resultado:
fonte
.
corresponde a qualquer personagem. Usado em conjunto com as chaves já mencionadas:fonte
grep -E '([=o])\1{10}' test
egrep -E '([=o]){10}' test
funciona bem com o seu exemplo (note a falta de\1
no segundo comando). Mas o comandogrep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='
não corresponde à linha! No entanto, o comando sem\1
partidas a linha:grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o==='
. Por favor, você poderia explicar? Saúde;)Em alguns aplicativos, você precisa remover as barras para que funcione.
ou isto:
fonte
use o operador {10,}:
fonte
Você também pode usar o PowerShell para substituir palavras ou reptições de caracteres rapidamente. PowerShell é para Windows. A versão atual é 3.0.
fonte
preg_replace
Exemplo de PHP :Aqui
[a-z]
atinge o caractere()
e permite que ele seja usado com referência anterior\\1
que tenta corresponder a outro mesmo caractere (observe que isso já está direcionando 2 caracteres consecutivos), assim:Se você fez:
isso estaria apagando 3 caracteres repetidos consecutivos, gerando:
fonte
corresponde a
=
que é repetido 10 ou mais vezes.fonte
perl -e 'print "NO" if "abcdefghijklmno" =~ /.{10,}/;'
Um exemplo de PowerShell um pouco mais genérico. No PowerShell 7, a correspondência é destacada incluindo o último espaço (você pode destacar na pilha?).
fonte