¿Qué significa el símbolo más en regex decir?

  • Puede usted por favor enviar una muestra?
  • /s+a+m+p+l+e+/
  • ^^ coincide con sample, samplee, y sssaaaaaammmppplllllle pero no smple

4 Comentarios

  1. 58

    + realidad, puede tener dos significados, dependiendo del contexto.

    Como las otras respuestas se mencionó, + generalmente es un la repetición operador, y hace que el anterior token para que se repita una o más veces. a+ se expresa como aa* en el lenguaje formal de la teoría de, y también podría ser expresada como a{1,} (que coincida con un mínimo de 1 veces y un máximo de infinitas veces).


    Sin embargo, + también puede hacer otros cuantificadores posesivo si se sigue un operador de repetición (es decir,?+, *+, ++ o {m,n}+). Un posesivo cuantificador es una característica avanzada de algunos de regex sabores (PCRE, Java y el JGsoft motor) que indica que el motor no dar marcha atrás una vez que un partido que ha sido hecho.

    A entender cómo funciona esto, tenemos que entender dos conceptos de regex motores: avidez y retroceso. La avidez significa que, en general, expresiones regulares se trate de consumir tantos caracteres como pueden. Digamos que nuestro modelo es .* (el dot es un especial de la construcción en expresiones regulares que significa cualquier carácter1; la estrella significa coincidencia con cero o más veces), y su objetivo es aaaaaaaab. La cadena completa se consume, debido a que la totalidad de la cadena es la coincidencia más larga que cumple el patrón.

    Sin embargo, digamos que cambiar el patrón de .*b. Ahora, cuando el regex motor intenta partido contra aaaaaaaab, el .* volverá a consumir la totalidad de la cadena. Sin embargo, dado que el motor haya alcanzado el final de la cadena y el patrón aún no está satisfecho (el .* consumido todo, pero el patrón todavía tiene que coincidir con b después), se backtrack, uno de los personajes en un tiempo y tratar de coincidir con b. La primera backtrack hará el .* consumir aaaaaaaa y, a continuación, b puede consumir b, y el patrón se realiza correctamente.

    Posesivo cuantificadores también son codiciosos, pero como se ha mencionado, una vez que regresen a un partido, el motor no puede retroceder más allá de ese punto. Así que si podemos cambiar nuestro patrón de .*+b (coincidencia con cualquier carácter cero o más veces, posesivamente, seguido por un b), y tratar de coincidir con aaaaaaaab, de nuevo el .* consumirá toda la cadena, pero luego ya es posesivo, retroceso de la información que se desecha, y el b no puede ser igualado por lo que el patrón de falla.


    1 En la mayoría de los motores, el punto no coincide con un carácter de nueva línea, a menos que el /s («singleline» o «dotall») modificador de se especifica.

    • +1; posesivo cuantificadores sólo funciona en Java, PCRE, o la JGSoft regex motor. Ruby, Perl, y .Uso de la RED atómica grupos (?>.*).
    • A la que me referí a eso, pero ahora he hecho más explícito en mi respuesta.
    • Perl tiene soporte de possesive cuantificadores, probablemente desde 5.10
    • Gracias por la info. Parece que esta comparación no es hasta la fecha ya, entonces.
    • Impresionante respuesta! Realmente me ayudó a entender el + un montón. Gracias.
  2. 12

    En la mayoría de las implementaciones + significa «uno o más».

    En algunos escritos teóricos + es usado para significar «o» (la mayoría de las implementaciones de uso de la | símbolo para eso).

  3. 6

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

    [0-9]+

    Coincidiría:

    1234567890

    En:

    He 1234567890 dólares

  4. 3

    Una o más ocurrencias de la anterior símbolos.

    E. g. a+ significa la letra a una o más veces. Por lo tanto, a partidos a, aa, aaaaaa pero no una cadena vacía.

    Si usted sabe lo que el asterisco (*) significa, entonces usted puede expresar (exp)+ como (exp)(exp)*, donde (exp) es cualquier expresión regular.

Dejar respuesta

Please enter your comment!
Please enter your name here