¿Podría obtener un ejemplo de cómo difieren estos tres elementos (son estos llamados metacaracteres)?
Sé que eso *
significa todo o nada, pero no estoy seguro de si es la forma correcta de pensarlo. Por otro lado .
y ?
parece lo mismo. Coinciden con un personaje, ¿verdad?
Respuestas:
Tomado directamente de Wikipedia :
La gran diferencia es que el asterisco coincide con cero o más ocurrencias, mientras que el signo de interrogación coincide con cero o una aparición. Compare estos dos ejemplos:
Debido a que en
colouur
la letra u (el elemento anterior al calificador?
) ocurrió más de una vez, no coincide con?
, pero sí coincide con*
Ejemplo similar:
Desde la misma página de Wikipedia:
En nuestro ejemplo,
Apropiadamente, el último se lee como
match any line that has "colou", plus any character, plus letter "r"
Conclusión
Usted ha preguntado: "Sé que '*' significa todo o nada, pero no estoy seguro de si es la forma correcta de pensarlo. Por el otro '". & '?' parece lo mismo ". Como puede ver, el punto y el asterisco no son exactamente lo mismo. El punto opera en cualquier carácter que pueda estar ocupando esa posición específica, mientras que el signo de interrogación opera en el elemento anterior.
fuente
Puede estar confundiendo expresiones regulares con globos de shell
En la expresión regular, la sintaxis
.
representa cualquier carácter individual (generalmente excluyendo el carácter de nueva línea), mientras que*
es un cuantificador que significa cero o más del átomo de expresión regular anterior (carácter o grupo).?
es un cuantificador que significa cero o una instancia del átomo anterior, o (en las variantes de expresiones regulares que lo admiten) un modificador que establece el comportamiento del cuantificador en no codicioso.En los globos de shell,
?
representa un solo carácter (como las expresiones regulares.
) mientras que*
representa una secuencia de cero o más caracteres (equivalente a expresiones regulares.*
).Un par de referencias que puede encontrar útiles son http://www.regular-expressions.info/quickstart.html y http://mywiki.wooledge.org/glob
fuente
Nota:
Examples provided are in Python.
Aunque el concepto sigue siendo el mismo.'.'
es un símbolo coincidente que coincide con cualquier carácter excepto el carácter de nueva línea (esto también se puede anular con unre.DOTALL
argumento en Python). Por lo tanto, también se llama como comodín .'*'
es un cuantificador (define con qué frecuencia puede ocurrir un elemento). Es la abreviatura de {0,} .Significa "coincidencia cero o más": el grupo que precede a la estrella puede aparecer cualquier número de veces en el texto. Puede estar completamente ausente o repetirse una y otra vez.
'?'
También es un cuantificador . Es la abreviatura de {0,1} .Significa "Hacer coincidir cero o uno del grupo que precede a este signo de interrogación". También se puede interpretar como la parte que precede al signo de interrogación es opcional .
p.ej:
En el ejemplo anterior '?' indica que los dos dígitos que lo preceden son opcionales. Es posible que no aparezcan o que ocurran como máximo una vez.
Diferencia entre '.' y '?':
'.'
coincide / acepta / verifica cualquier carácter individual para el lugar que ocupa en la expresión regular.p.ej:
'?'
coincide / verifica la ocurrencia cero o única del grupo que lo precede .Verifique el ejemplo del número de móvil.
Lo mismo va con
'*'
. Verificará cero o más ocurrencias del grupo que lo precede .Combinación:
'.*'
: Acepta tantas secuencias como estén disponibles. Enfoque codicioso .'.*?
'Acepta la primera secuencia coincidente y se detiene. Enfoque no codiciosoPara más información, considere leer las siguientes dos preguntas ...
fuente