2012-05-26 33 views
5

¿Alguien puede decir la diferencia entre los * y + operadores en el ejemplo siguiente:Diferencia entre * y + expresiones regulares

[<>]+[<>]*

+1

[Lo que absolutamente cada programador debe saber acerca de las expresiones regulares] (http://wp.me/p2pTzU-4) y [regular-expressions.info] (http://www.regular-expressions.información/tutorial.html). Esos operadores se llaman "Quantifier" – stema

+1

stema, ojalá pudiera rechazar su comentario. El objetivo de stackoverflow es obtener respuestas rápidamente, no leer más documentación. También podría haber respondido lmgtfy. Esta pregunta aparece como # 1 en google cuando se busca "diferencia de expresiones regulares entre * y +" –

+0

stema Gracias por su gran ayuda. encontré tu artículo muy útil. –

Respuesta

10

* significa cero o más, y + significa que uno o -Más. Entonces, la diferencia es que la cadena vacía coincidiría con la segunda expresión, pero no con la primera.

+0

¿No es esto al revés? '*' coincidirá en vacío, pero '+' no. –

3

+ significa uno o más del átomo anterior. ({1,})

* significa cero o más. Esto no puede coincidir con nada, además de los caracteres especificados en su expresión de corchetes. ({0,})

Tenga en cuenta que + está disponible en expresiones regulares extendidas y compatibles con Perl, y no está disponible en Basic RE. * está disponible en los tres dialectos RE. Ese dialecto que estás usando depende muy probablemente del idioma en el que te encuentres.

Casi todo, en los sistemas operativos modernos que todavía tienen BRE predeterminado son grep y sed (ambos tienen la capacidad ERE como opción) y no vim vi.

1

[<>]+ es igual que [<>][<>]*

2

Son cuantificadores.

  • + significa 1 o muchos (al menos una ocurrencia para el partido tenga éxito)
  • * significa 0 o muchos (el partido tiene éxito, independientemente de la presencia de la cadena de búsqueda)
3

* significa cero o más de la expresión anterior.

En otras palabras, la expresión es opcional.

puede definir un número entero de esta manera:

-*[0-9]+

En otras palabras, un signo negativo opcional seguido de uno o más dígitos.

26

Cada uno de ellos son los cuantificadores, el cuantificador estrella (*) significa que la expresión anterior puede coincidir con cero o más veces, es como {0,} mientras que el cuantificador más (+) indican que la expresión anterior DEBE coincidir con al menos una vez o varias veces y es lo mismo que {1,}.

Así que para recapitular:

a* ---> a{0,} ---> Match a or aa or aaaaa or an empty string 
a+ ---> a{1,} ---> Match a or aa or aaaa but not a string empty 
+3

Esta respuesta se ha agregado a [Preguntas frecuentes sobre la expresión regular de desbordamiento de pila] (http://stackoverflow.com/a/22944075/2736496), en "Cuantificadores" – aliteralmind

Cuestiones relacionadas