2011-12-20 10 views

Respuesta

86

Se llaman cuantificadores.

* 0 o más de la expresión anterior

+ 1 o más de la expresión anterior

por defecto por un cuantificador es codicioso, eso significa que coincide con tantos caracteres como sea posible.

El ? después de que un cuantificador cambia el comportamiento para hacer que este cuantificador sea "no codificado", significa que coincidirá lo menos posible.

Ejemplo codicioso/ungreedy

Por ejemplo, en la cadena "ABAB"

a.*b coincidirá con "ABAB" (preg_match_all volverá una coincidencia, el "ABAB")

mientras que a.*?b coincidirá solo con el inicio "ab" (preg_match_all devolverá dos coincidencias, "ab")

Puedes probar tus expresiones regulares en línea, p.en Regexr, see the greedy example here

+0

Ejemplo correcto http://regexr.com/39t01 – Tomas

+0

"perezoso" es el término más común para "no codicioso" –

5

+ es mínimo uno, * puede ser cero también.

16

El primero (+) es uno o más caracteres. El segundo (*) es cero o más caracteres. Ambos son no codiciosos (?) y coinciden con cualquier cosa (.).

+0

... excepto las nuevas líneas. –

+0

Eso depende de si el modificador s está establecido o no. – Quentin

4

A + coincide con una o más instancias del patrón anterior. Un * coincide con cero o más instancias del patrón anterior.

Así que, básicamente, si utiliza un + debe haber al menos una instancia del patrón, si usa *, seguirá coincidiendo si no hay instancias de este.

4

+ partidos al menos un carácter

* coincide con cualquier número (incluyendo 0) de caracteres

El ? indica una expresión perezosa, por lo que coincidirá con el menor número de caracteres posible.

3

Una estrella es muy similar a un más, la única diferencia es que mientras el más coincide con 1 o más del carácter/grupo anterior, el inicio coincide con 0 o más.

2

Considere a continuación la cadena que coincide.

ab 

El patrón (ab.*) volverá a la altura de grupo de captura con el resultado de ab

Mientras que el patrón (ab.+) no coincidirá y no devolver nada.

Pero si cambia la cadena a continuación, volverá aba para el patrón (ab.+)

aba 
+0

Creo que esta es la mejor respuesta específicamente a la pregunta de + vs * – Terrence

0

creo que las respuestas anteriores fallan para resaltar un ejemplo sencillo:

por ejemplo tenemos una matriz:

numbers = [5, 15] 

la siguiente expresión expresiones regulares ^[0-9]+ partidos o 15 nly. Sin embargo, ^[0-9]* coincide con 5 and 15. La diferencia es que el operador + requiere al menos un duplicado de la expresión regex anterior

0

En RegEx, {i,f} medios "entre i a f partidos". Vamos a echar un vistazo a los siguientes ejemplos:

  • {3,7} significa entre 3 a 7 partidos
  • {,10} significa hasta 10 partidos sin límite inferior (es decir, el límite inferior es 0)
  • {3,} significa al menos 3 partidos sin límite superior (es decir, el límite superior es el infinito)
  • {,} significa que no hay límite superior o límite inferior para el número de coincidencias (es decir, el límite inferior es 0 y el límite superior es el infinito)
  • {5} medios exactamente 4

mayoría de las buenas lenguas contienen abreviaturas, también lo hace RegEx:

  • + es la abreviatura de {1,}
  • * es la abreviatura de {,}
  • ? es la abreviatura de {,1}

Esto significa que + requiere al menos 1 coincidencia, mientras que * acepta cualquier cantidad de coincidencias o ninguna coincidencia y ? acepta no más de 1 coincidencia o cero coincidencias.

Crédito: Codecademy.com