regulares regular probar online expresiones expresion especiales espacio ejemplos cualquier crear caracteres caracter blanco alfanumerico regex symbol

regex - probar - ¿Cuál es el significado de+en una expresión regular?



expresiones regulares java (4)

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


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

[0-9]+

Coincidiría

1234567890

En:

Tengo 1234567890 dolares


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

En algunos escritos teóricos, + se usa para significar "o" (la mayoría de las implementaciones usan el símbolo | para).


Una o más apariciones de los símbolos anteriores.

Por ejemplo, a+ significa la letra a o más veces. Por lo tanto, a coincide con a , aa , aaaaaa pero no una cadena vacía.

Si sabe qué significa el asterisco ( * ), puede expresar (exp)+ as (exp)(exp)* , donde (exp) es cualquier expresión regular.


+ realmente puede tener dos significados, dependiendo del contexto.

Al igual que las otras respuestas mencionadas, + generalmente es un operador de repetition , y hace que el token anterior se repita una o más veces. a+ se expresaría como aa* en la teoría del lenguaje formal , y también podría expresarse como a{1,} (coincida con un mínimo de 1 veces y un máximo de infinitas veces).

Sin embargo, + también puede hacer que otros cuantificadores sean possessive si sigue un operador de repetición (es decir ?+ , *+ , ++ o { m , n }+ ). Un cuantificador posesivo es una característica avanzada de algunos sabores de expresiones regulares (PCRE, Java y el motor JGsoft) que le dice al motor que no retroceda una vez que se haya realizado una coincidencia.

Para entender cómo funciona esto, necesitamos entender dos conceptos de los motores de expresiones regulares: avaricia y retroceso . La codicia significa que, en general, las expresiones regulares tratarán de consumir tantos caracteres como puedan. Digamos que nuestro patrón es .* (El dot es una construcción especial en expresiones regulares que significa cualquier carácter 1 ; la estrella significa que se ajusta cero o más veces), y su objetivo es aaaaaaaab . La cadena completa se consumirá, ya que la cadena completa es la coincidencia más larga que satisface el patrón.

Sin embargo, digamos que cambiamos el patrón a .*b Ahora, cuando el motor de expresiones regulares intenta coincidir con aaaaaaaab , el .* Volverá a consumir toda la cadena. Sin embargo, dado que el motor habrá llegado al final de la cadena y el patrón aún no está satisfecho (el .* Consumió todo, pero el patrón todavía tiene que coincidir con b después), retrocederá , un personaje a la vez, e intentará partido b . El primer retroceso hará que .* Consuma aaaaaaaa , y luego b puede consumir b , y el patrón tiene éxito.

Los cuantificadores posesivos también son codiciosos, pero como se mencionó, una vez que devuelven una coincidencia, el motor ya no puede retroceder más allá de ese punto. Entonces, si cambiamos nuestro patrón a .*+b (coincida con cualquier carácter cero o más veces, posesivamente, seguido de una b ), y tratamos de coincidir con aaaaaaaab , nuevamente .* Consumirá toda la cadena, pero luego ya que es posesivo , la información de retroceso se descarta, y la b no puede coincidir, por lo que el patrón falla.

1 En la mayoría de los motores, el punto no coincidirá con un carácter de nueva línea, a menos que se especifique el modifier /s ("singleline" o "dotall").