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?

Author: sertsedat, 2013-08-23

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.

 95
Author: Jerry,
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:

introduzca la descripción de la imagen aquí

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: Análisis visual de lo que wordboundary está haciendo desde jex.im/regulex

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]]}

 94
Author: Eric Leschinski,
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
 3
Author: Vasyl Gutnyk,
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.

 2
Author: EverythingRightPlace,
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