/ / ¿Cómo construyo una expresión regular para que coincida con un patrón mientras excluyo ciertas palabras conocidas que coincidirían con el patrón?

¿Cómo construyo una expresión regular para que coincida con un patrón mientras excluyo ciertas palabras conocidas que coincidirían con el patrón?

¿Cómo construyo una expresión regular para que coincida con un patrón mientras excluyo ciertas palabras conocidas que coincidirían con el patrón? En el ejemplo tengo esta cadena:

Me gusta d.r.e.a.m ir a hacer h i k i n g.

y tengo la siguiente expresión regular: b (. {1,2} (s |. | - | _)) {2,}

Esto coincide:

a d.r.e.a.m en

hacer h i k i n g.

Lo que quiero es cambiar esta expresión regular para que coincida:

sueño

h i k i n g.

Si lo cambio a esto b ([^ (to)] {1,2} (s |. | - | _)) {2,}

funcionará parcialmente pero excluiría letras individuales como "t" "o" en lugar de la palabra completa "to"

¿Cómo resolver esto?

Respuestas

2 para la respuesta № 1

Puedes utilizar

/b(?!(?:I|at|[td]o)b)w{1,2}(?:[W_](?!(?:I|at|[td]o)b)w{1,2})*b/

Ver esta demo Rubular

Concuerda

  • b - un límite de palabra
  • (?!(?:I|at|[td]o)b)w{1,2} - seguido de una palabra char de 1 o 2 palabras que no es igual a I, at, to o do
  • (?:[W_](?!(?:I|at|[td]o)b)w{1,2})* - 0+ repeticiones de:
    • [W_] - un carácter no verbal o _
    • (?!(?:I|at|[td]o)b)w{1,2} - véase más arriba
  • b - Un límite de palabra.