Solución:
Los corchetes están pensados para la clase de carácter y, en realidad, estás intentando hacer coincidir cualquiera de los siguientes: s
, |
, s
(de nuevo), e
, a
, s
(de nuevo), o
y n
.
En su lugar, utilice paréntesis para agrupar:
(s|season)
o grupo no capturador:
(?:s|season)
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.
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.
Usaré el shell interactivo phpsh en Ubuntu 12.10 para demostrar el motor de expresiones regulares PCRE a través del método conocido como preg_match
Inicie phpsh, coloque algo de contenido en una variable, coincida con la palabra.
[email protected]:~/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.
Coincidir con palabras específicas en la línea de comandos sin límites de palabras
[email protected]:~/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. 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
, ver:
Imagen visual Regex adquirida de http://jex.im/regulex y https://github.com/JexCheng/regulex Ejemplo:
[email protected]:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(bdartb|bfartb)', $gun1);
1
php> echo preg_match('(bdartb|bfartb)', $gun2);
1
php> echo preg_match('(bdartb|bfartb)', $gun3);
0
php> echo preg_match('(bdartb|bfartb)', $gun4);
0
los b
afirma que tenemos un límite de palabras, asegurándose de que “dardo” coincida, pero “dardo” no.
Pruebo ejemplos en js. La solución más simple: solo agregue la palabra que necesita dentro / /:
var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result
Ahora, si necesita esta palabra específica con límites, no dentro de ningún otro signo-letra. Usamos B marcador:
var reg = /bcatb/
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 fg a obtener información sobre el lugar / índice de nuestra palabra.
var matchResult = /bcatb/.exec("good cat good");
console.log(matchResult.index); // 5
Si necesitamos obtener todas las palabras coincidentes en una cadena / oración / texto, podemos usar el modificador g (coincidencia global):
"cat good cat good cat".match(/bcatb/g).length
// 3
Ahora el último: no necesito una palabra específica, sino algunas de ellas. Usamos | signo, significa elección / o.
"bad dog bad".match(/bcat|dogb/g).length
// 1