Expresión regular para que coincida con una palabra completa o una letra
Quiero hacer coincidir una expresión regular en una palabra completa.
En el siguiente ejemplo estoy tratando de coincidir s
o season
pero lo que tengo coincide s
, e
, a
, o
y n
.
[s|season]
¿Cómo puedo hacer que una expresión regular coincida con una palabra completa?
4 answers
Los corchetes están destinados a la clase de caracteres, y en realidad está tratando de coincidir con cualquiera de: s
, |
, s
(de nuevo), e
, a
, s
(de nuevo), o
y n
.
Use paréntesis en lugar de agrupar:
(s|season)
O grupo no capturador:
(?:s|season)
Nota: Los grupos que no son de 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 mira primero si necesitas el partido o no. Si no lo hace, mejor use el grupo que no es de captura para asignar más memoria para el cálculo en lugar de almacenar algo que nunca necesitará usar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-27 09:52:15
Utilice este ejemplo en línea en vivo para probar su patrón:
Captura de pantalla anterior tomada de este ejemplo en vivo: https://regex101.com/r/cU5lC2/1
Coincide con cualquier palabra completa en la línea de comandos.
Usaré el phpsh interactive shell en Ubuntu 12.10 para demostrar el PCRE regex engine a través del método conocido como preg_match
Iniciar phpsh, poner algo de contenido en una variable, coincide con la palabra.
el@apollo:~/foo$ phpsh
php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'
php> echo preg_match('(\w+)', $content1);
1
php> echo preg_match('(\w+)', $content2);
1
php> echo preg_match('(\w+)', $content3);
0
El método preg_match utilizó el motor PCRE dentro del lenguaje PHP para analizar variables: $content1
, $content2
y $content3
con el patrón (\w)+
.
Cont content1 y cont content2 contienen al menos una palabra,$content3 no.
Hacer coincidir una palabra específica en la línea de comandos sin bountaries de palabras
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(dart|fart)', $gun1);
1
php> echo preg_match('(dart|fart)', $gun2);
1
php> echo preg_match('(dart|fart)', $gun3);
1
php> echo preg_match('(dart|fart)', $gun4);
0
Las variables gun1
y gun2
contienen la cadena dart
o fart
que es correcta, pero gun3 contiene darty
y todavía coincide, es decir, la problema. Así que en el siguiente ejemplo.
Haga coincidir palabras específicas en la línea de comandos con límites de palabras:
Los límites de las palabras pueden coincidir con \b
, véase:
Imagen visual Regex adquirida de http://jex.im/regulex y https://github.com/JexCheng/regulex Ejemplo:
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0
php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0
El \b
afirma que tenemos un límite de palabra, asegurándonos de que "dart" coincida, pero "darty" no.{[18]]}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 09:09:52
Pruebo ejemplos en js. La solución más simple-simplemente agregue la palabra u necesita dentro//:
var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result
Ahora si u necesita esta palabra específica con límites, no dentro de cualquier otro signo-letras. Usamos b marcador:
var reg = /\bcat\b/
reg.test('acatb');//1 test
false // result
reg.test('have cat here');//2 test
true // result
También tenemos el método exec() en js, que devuelve object-result. Ayuda f. g. para obtener información sobre el lugar / índice de nuestra palabra.
var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5
Si necesitamos obtener todas las palabras coincidentes en cadena / oración / texto, podemos usar el modificador g (coincidencia global):
"cat good cat good cat".match(/\bcat\b/g).length
// 3
Ahora el último - no necesito 1 palabra específica, pero algunos de ellos. Usamos / firmar, significa elección / o.
"bad dog bad".match(/\bcat|dog\b/g).length
// 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-12 14:09:03
[ ]
define una clase de caracteres. Así que cada personaje que establezcas allí, coincidirá. [012]
coincidirá con 0
o 1
o 2
y [0-2]
se comporta de la misma manera.
Lo que desea son agrupaciones para definir una sentencia or -. Utilice (s|season)
para su problema.
Por cierto. tienes que tener cuidado. Los metacaracteres en regex normal (o dentro de una agrupación) son diferentes de la clase de carácter. Una clase de caracteres es como un sub-lenguaje. [$A]
solo coincidirá con $
o A
, nada más. No hay escapatoria aquí por el dólar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-23 12:09:37