Quiero hacer coincidir una expresión regular en una palabra completa.
En el siguiente ejemplo que estoy tratando de igualar s
o season
mas lo que tengo partidos s
, e
, a
, o
y n
.
[s|season]
¿Cómo hago una expresión regular para que coincida con una palabra completa?
regex
expression
word
NMGod
fuente
fuente
(season|s)
lugar.[season]
coincide con cualquiera des
,e
,a
,o
,n
.Respuestas:
Los corchetes son para clase de caracteres, y que en realidad están tratando de coincidir con uno cualquiera de:
s
,|
,s
(de nuevo),e
,a
,s
(de nuevo),o
yn
.Use paréntesis en su lugar para agrupar:
o grupo no capturador:
Nota: Los grupos de no captura le dicen al motor que no necesita almacenar la coincidencia, mientras que el otro (el grupo de captura sí). Para cosas pequeñas, ya sea que funcione, para cosas 'pesadas', es posible que desee ver primero si necesita la combinación o no. Si no lo hace, mejor use el grupo de no captura para asignar más memoria para el cálculo en lugar de almacenar algo que nunca necesitará usar.
fuente
?:
interior de una agrupación aliasnon-capturing
simplemente dice que no puede usar las expresiones coincidentes con$1
,$2
y así sucesivamente ... Si desea que una expresión no coincida, lo que necesita es^
.(?! ... )
insead, es decir,(?!s|season)
en este caso.Utilice este ejemplo en vivo en línea para probar su patrón:
Captura de pantalla anterior tomada de este ejemplo en vivo: https://regex101.com/r/cU5lC2/1
Coincidir con cualquier palabra completa en la línea de comandos.
Voy a estar utilizando el shell interactivo phpsh en Ubuntu 12.10 para demostrar el motor PCRE expresión regular a través del método conocido como preg_match
Inicie phpsh, ponga algo de contenido en una variable, coincida con la palabra.
El método utiliza el motor preg_match PCRE dentro del lenguaje PHP para analizar las variables:
$content1
,$content2
y$content3
con el(\w)+
patrón.$ content1 y $ content2 contienen al menos una palabra, $ content3 no.
Coincidir con palabras específicas en la línea de comandos sin límites de palabras
Variables
gun1
ygun2
contienen la cadenadart
ofart
cuál es correcta, pero gun3 contienedarty
y aún coincide, ese es el problema. Pasemos al siguiente ejemplo.Haga coincidir palabras específicas en la línea de comandos con límites de palabras:
Los límites de palabras se pueden combinar a la fuerza con
\b
, consulte:Imagen visual Regex adquirida de http://jex.im/regulex y https://github.com/JexCheng/regulex Ejemplo:
El
\b
afirma que tenemos un límite de palabra, asegurándose de "dardo" es igualada, pero "darty" no lo es.fuente
Pruebo ejemplos en js. La solución más simple: solo agregue la palabra que necesita dentro / /:
Ahora, si necesita esta palabra específica con límites, no dentro de ningún otro signo-letra. Usamos el marcador b :
También tenemos el método exec () en js, que devuelve object-result. Ayuda a fg a obtener información sobre el lugar / índice de nuestra palabra.
Si necesitamos obtener todas las palabras coincidentes en una cadena / oración / texto, podemos usar el modificador g (coincidencia global):
Ahora el último: no necesito una palabra específica, sino algunas de ellas. Usamos | signo, significa elección / o.
fuente
[ ]
define una clase de personaje. Así que todos los personajes que establezcas allí coincidirán.[012]
coincidirá0
o1
o2
y[0-2]
se comporta de la misma.Lo que desea son agrupaciones para definir una declaración o. Utilizar
(s|season)
para su problema.Por cierto. tienes que tener cuidado. Los metacaracteres en expresiones regulares normales (o dentro de una agrupación) son diferentes de la clase de carácter. Una clase de personaje es como un sub-lenguaje.
[$A]
solo coincidirá$
oA
, nada más. No hay escapatoria aquí por el dólar.fuente