regex - solo - Varias palabras en cualquier orden usando expresiones regulares
regex replace online (7)
Como dice el título, necesito encontrar dos palabras específicas en una oración. Pero pueden estar en cualquier orden y cualquier carcasa. ¿Cómo hago esto usando regex?
Por ejemplo, necesito extraer las palabras test
y long
de la siguiente oración, ya sea que la test
palabra sea lo primero o que llegue el momento.
This is a very long sentence used as a test
ACTUALIZACIÓN: Lo que no mencioné en la primera parte es que también debe ser insensible a las mayúsculas y minúsculas.
Estaba usando libpcre con C, donde podría definir textos destacados. Me ayudaron a hacer coincidir fácilmente no solo palabras, sino cualquier subexpresiones en cualquier orden. La expresión regular se ve así:
(?C0)(expr1(?C1)|expr2(?C2)|...|exprn(?Cn)){n}
y la función de llamada asegura que cada subexpresión se empareja exactamente una vez, como:
int mycallout(pcre_callout_block *b){
static int subexpr[255];
if(b->callout_number == 0){
//callout (?C0) - clear all counts to 0
memset(&subexpr,''/0'',sizeof(subexpr));
return 0;
}else{
//if returns >0, match fails
return subexpr[b->callout_number-1]++;
}
}
Algo así debería ser posible en Perl también.
No creo que puedas hacerlo con una sola expresión regular. Necesitarás da lógica Y de dos - uno buscando cada palabra.
Prueba esto:
/(?i)(?:test.*long|long.*test)/
Eso coincidirá con cualquiera de las test
y luego con las long
, o las long
y luego las test
. Ignorará las diferencias de casos.
Puedes usar
(?=.*test)(?=.*long)
Fuente: MySQL SELECT LIKE o REGEXP para unir múltiples palabras en un registro
Supongo (siempre peligroso) que quiere encontrar palabras completas, por lo que "prueba" coincidiría pero "irritable" no lo haría. Por lo tanto, el patrón debe buscar límites de palabras, por lo que utilizo el patrón de límite de palabras "/ b".
/(?i)(/btest/b.*/blong/b|/blong/b.*/btest/b)/
Utilice un grupo de captura si desea extraer las coincidencias: (prueba) | (larga) Luego, dependiendo del idioma en uso, puede referirse al grupo emparejado usando $ 1 y $ 2, por ejemplo.
sin saber qué idioma
/test.*long/
o
/long.*test/
o
/test/ && /long/