tester one regex perl character

one - ¿Cómo puedo encontrar letras repetidas con Perl Regex?



regex groups javascript (11)

Creo que esto también debería funcionar:

((/w)(?=/2))+/2

Estoy buscando una expresión regular que encontrará letras que se repiten. Entonces, cualquier carta dos o más veces, por ejemplo:

booooooot or abbott

No sabré la carta que estoy buscando con anticipación.

Esta es una pregunta que me hicieron en entrevistas y luego me preguntaron en entrevistas. No mucha gente lo entiende correctamente.


Creo que realmente quiere esto en lugar de la "/ w" ya que eso incluye números y guiones bajos.

([a-zA-Z])/1+

Ok, vale, puedo darme una pista Leon. Úselo para el mundo Unicode o para cosas de posix.

([[:alpha:]])/1+


Creo que usar una referencia inversa funcionaría:

(/w)/1+

/w es básicamente [a-zA-Z_0-9] así que si solo quieres hacer coincidir las letras entre A y Z (sin distinción de mayúsculas y minúsculas), utiliza [a-zA-Z] lugar.

(EDITAR: o, como Tanktalus mencionado en su comentario (y como otros han respondido también), [[:alpha:]] , que es sensible a la configuración regional)


El código siguiente devolverá todos los caracteres, que se repiten dos veces o más.

my $ str = "SSSannnkaaarsss";

imprimir $ str = ~ / (/ w) / 1 + / g;


Es posible que desee tener cuidado con lo que se considera una carta, y esto depende de su ubicación. El uso de ISO Latin-1 permitirá que los caracteres acentuados del idioma occidental se combinen como letras. En el siguiente programa, la configuración regional predeterminada no reconoce é, y por lo tanto no coincide con créé . Descomente el código de configuración de configuración regional y luego comienza a coincidir.

También tenga en cuenta que / w incluye dígitos y el carácter de subrayado junto con todas las letras. Para obtener solo las letras, debe tomar el complemento de los caracteres no alfanuméricos, dígitos y guiones bajos. Esto deja solo letras.

Eso podría ser más fácil de entender al enmarcarlo como la pregunta "¿Qué expresión regular concuerda con cualquier dígito excepto 3?", Y la respuesta es / [^ / D3] /.

#! /usr/local/bin/perl use strict; use warnings; # uncomment the following three lines: # use locale; # use POSIX; # setlocale(LC_CTYPE, ''fr_FR.ISO8859-1''); while (<DATA>) { chomp; if (/([^/W_0-9])/1+/) { print "$_: dup [$1]/n"; } else { print "$_: nope/n"; } } __DATA__ 100 food créé a::b


FYI, aparte de RegExBuddy, un sitio realmente útil y gratuito para probar expresiones regulares es RegExr en gskinner.com . Maneja ([[:alpha:]])(/1+) muy bien.


Puede encontrar cualquier letra, luego use /1 para encontrar la misma letra por segunda vez (o más). Si solo necesita saber la letra, entonces $1 contendrá. De lo contrario, puede concatenar la segunda coincidencia con la primera.

my $str = "Foooooobar"; $str =~ /(/w)(/1+)/; print $1; # prints ''o'' print $1 . $2; # prints ''oooooo''


Qué tal si:

(/w)/1+

La primera parte crea un grupo sin nombre alrededor de un personaje, luego la referencia retrospectiva busca ese mismo personaje.


Solo por patadas, un enfoque completamente diferente:

if ( ($str ^ substr($str,1) ) =~ //0+/ ) { print "found ", substr($str, $-[0], $+[0]-$-[0]+1), " at offset ", $-[0]; }


Use / N para referirse a grupos anteriores:

/(/w)/1+/g


/(.)//1{2,}+/u

''u'' modificador que coincide con unicode