2012-07-12 26 views
9

Tengo un problema de expresiones regulares que parece que no puedo resolver. De hecho, no sé si Regex puede hacer esto, pero necesito hacer coincidir un rango de caracteres n veces al final de un patrón. por ej. blahblah [A-Z] {n} El problema es que cualquier caracter que coincida con el rango final debe ser igual.coincide con el mismo carácter desconocido varias veces

Por ejemplo, quiero coincidir

  • blahblahAAAAA
  • blahblahEEEEE
  • blahblahQQQQQ

pero no

  • blahblahADFES
  • blahblahZYYYY

¿Hay algún patrón de expresiones regulares que pueda hacer esto?

+0

Consulte esta pregunta: http://stackoverflow.com/questions/7147810/regular-expression-same-character-3-times – Palladium

+0

gracias por las respuestas, esto funciona muy bien –

Respuesta

18

Usted puede utilizar este modelo: blahblah([A-Z])\1+

El \1 es una copia de referencia al primer grupo de captura, en este caso ([A-Z]). Y el + coincidirá con ese personaje una o más veces. Para limitarlo, puede reemplazar el + con un número específico de repeticiones usando {n}, como \1{3}, que coincidirá tres veces.

Si necesita toda la cadena para que coincida continuación, asegúrese de prefijar con ^ y terminar con $, respectivamente, por lo que el patrón se hace ^blahblah([A-Z])\1+$

Puede leer más sobre back-references here.

0

blahblah(.)\1*\b debería funcionar en casi todos los sabores de idiomas. (.) capta uno de los elementos, luego \1* coincide con esa (la primera coincidencia) cualquier cantidad de veces.

2

En la mayoría de las implementaciones de expresiones regulares, puede lograr esto al hacer referencia a un grupo de captura en su expresión regular. Por su ejemplo, se puede utilizar el siguiente para que coincida con el mismo carácter en mayúscula cinco veces:

blahblah([A-Z])\1{4} 

Tenga en cuenta que coincidan con la expresión regular n veces, es necesario utilizar \1{n-1} desde un partido vendrá del grupo de captura.

Cuestiones relacionadas