Pregunta Expresión regular para unir una palabra completa [duplicado]


Esta pregunta ya tiene una respuesta aquí:

Quiero hacer coincidir una expresión regular en una palabra completa.

En el siguiente ejemplo, intento hacer coincidir s o season pero lo que tengo coincide s, e, a, o y n.

[s|season]

¿Cómo hago una expresión regular para que coincida con una palabra completa?


74
2017-08-23 12:05


origen


Respuestas:


Los corchetes están destinados a la clase de personaje, y en realidad intentas hacer coincidir cualquiera de los siguientes: s, |, s (de nuevo), e, a, s (de nuevo), o y n.

Use paréntesis en su lugar para agrupar:

(s|season)

o grupo no capturante:

(?: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 lo hace). Para cosas pequeñas, ya sea que funcione, para cosas 'de servicio pesado', es posible que desee ver primero si necesita el partido o no. Si no lo hace, mejor utilice el grupo sin captura para asignar más memoria para el cálculo en lugar de almacenar algo que nunca necesitará usar.


92
2017-08-23 12:07



Utilice este ejemplo en línea en vivo para probar su patrón:

enter image description here

Sobre la captura de pantalla tomada de este ejemplo en vivo: https://regex101.com/r/cU5lC2/1

Coincidencia de cualquier palabra completa en la línea de comando.

Estaré usando el Concha interactiva phpsh en Ubuntu 12.10 para demostrar el PCRE regex engine a través del método conocido como preg_match

Inicie phpsh, ponga algo de contenido en una variable, haga coincidir 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 (\w)+ patrón.

$ content1 y $ content2 contienen al menos una palabra, $ content3 no.

Coincide con palabras específicas en la línea de comandos sin bountarios 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

Variables gun1 y gun2 contener la cadena dart o fart que es correcto, pero gun3 contiene darty y aún coincide, ese es el problema. Entonces en el siguiente ejemplo.

Combina palabras específicas en la línea de comandos con límites de palabras:

Los límites de palabras se pueden forzar con \b, ver: Visual analysis of what wordboundary is doing from jex.im/regulex

Regex Visual Image 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

los \b afirma que tenemos un límite de palabras, asegurándonos de que "dart" coincida, pero "darty" no.


89
2018-01-06 17:31



Pruebo ejemplos en js. La solución más simple: solo agrega la palabra que necesitas dentro de / /:

var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result

Ahora si necesitas esta palabra específica con límites, no dentro de ninguna otra señal-letra. Usamos segundo 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 a 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 g modificador (concordancia global):

"cat good cat good cat".match(/\bcat\b/g).length
// 3 

Ahora el último, no necesito una palabra específica, sino algunas. Usamos | signo, significa elección / o.

"bad dog bad".match(/\bcat|dog\b/g).length
// 1

3
2017-11-12 13:33



[ ] define una clase de personaje. Así que cada personaje que establezcas allí, coincidirá. [012]coincidirá 0 o 1 o 2 y [0-2] se comporta igual

Lo que quiere es agrupaciones para definir una declaración o. Utilizar (s|season) para tu problema

Por cierto. tienes que tener cuidado Los metacaracteres en expresiones regulares (o dentro de una agrupación) son diferentes de la clase de caracteres. Una clase de personaje es como un sub-lenguaje. [$A] solo coincidirá $ o A, nada más. No escapando aquí por el dólar.


2
2017-08-23 12:09



Para uso insensible a mayúsculas y minúsculas

([sS][eE][aA][sS][oO][nN])

Para búsqueda en minúsculas

([s][e][a][s][o][n])

Para mayúsculas y minúsculas

([S][E][A][S][O][N])

-9
2018-05-20 12:33