2011-03-24 13 views
12

Solo una expresión regular simple No sé cómo escribir.Cómo hacer coincidir varias palabras en la expresión regular

La expresión regular debe asegurarse de que una cadena coincida con las 3 palabras. Veo cómo hacer que coincida con cualquier del 3:

/advancedbrain|com_ixxocart|p\=completed/ 

pero necesito para asegurarse de que todos los 3 palabras están presentes en la cadena.

Estas son las palabras

  1. advancebrain
  2. com_ixxocart
  3. p = completado
+0

Así como un ejemplo de cadena que tiene 'bla bla muestra de texto advancebrain donde # com_ixxocart bla blahp = completedstuff'? –

+0

Personalmente, haría esto con 3 expresiones regulares; podría ser bastante feo como solo uno, y probablemente más lento. – Pointy

+0

¿Se trata de una cadena de consulta? Si es así, es posible que no necesite usar ningún regex – racerror

Respuesta

16

Uso lookahead assertions:

^(?=.*advancebrain)(?=.*com_ixxochart)(?=.*p=completed) 

coincidirá si los tres términos están presentes.

Es posible que desee añadir \b límites de trabajo en torno a los términos de búsqueda para asegurarse de que se hacen coincidir palabras completas y no subcadenas de otras palabras (como advancebraindeath) si es necesario para evitar esto:

^(?=.*\badvancebrain\b)(?=.*\bcom_ixxochart\b)(?=.*\bp=completed\b) 
+0

Solo tengo un campo de entrada para poner esta expresión regular, es para Google Analytics. Muestran el ejemplo de un simple/yourregex /. ¿Adivinarías que la anticipación funcionará? No sé qué lenguaje de programación usarán para ejecutar la expresión regular. – UpHelix

+0

Parece que GA (Google Analytics) admite búsquedas anticipadas. http://www.lunametrics.com/blog/2007/08/08/regular-expressions-for-ga-bonus-iii-lookahead/ – UpHelix

1

Uso anticipación:

(?=.*\badvancebrain)(?=.*\bcom_ixxocart)(?=.*\bp=completed) 

El pedido no importará. Los tres son obligatorios

+0

Mejor ancle la regex al principio, o obtendrá un rendimiento horrible si no los tres están presentes. –

+0

¡Sí, el tuyo es mejor! – Tom

4
^(?=.*?p=completed)(?=.*?advancebrain)(?=.*?com_ixxocart).*$ 

Pasamos la prueba demasiado tiempo y refinación =/Oh, bueno .. seguirá siendo publicar mi respuesta

Cuestiones relacionadas