2010-04-25 9 views

Respuesta

32

Prueba esto:

<(?!a|em|strong) 
+0

+1 Creo que lo hace por la sintaxis de expresiones regulares compatibles con Perl. (Para otras sintaxis, podría ser diferente) –

+0

Lo intenté y funciona bien, gracias – Kyle

+1

Por si a alguien le interesa, '?!' Inicia un lookahead negativo. Encontré una buena descripción general de las alternativas aquí: http://www.rexegg.com/regex-lookarounds.html – schnatterer

7

Se utiliza un negative lookahead, la forma más simple de lo que es (para este problema):

<(?!a|em|strong) 

El único problema es que ignorará <applet>. Una forma de solucionar esto es usando \b, que es una expresión de ancho cero (lo que significa que no captura ninguna de las entradas) que coincide con una palabra para una transición de una palabra a otra o de una palabra a otra. Los caracteres de Word son [0-9a-zA-Z_]. Por lo tanto:

<(?!(a|em|strong)\b) 
2

Si su motor de expresiones regulares tiene, usar una afirmación de búsqueda negativa hacia delante: esto se ve por delante en la cadena, y tiene éxito si no va a coincidir; sin embargo, no consume ninguna entrada. Por lo tanto, desea /<(?!(?:a|em|strong)\b)/: coincida con <, luego tenga éxito si no hay un a, em o strong seguido de un salto de palabra, \b.

+0

Punto interesante sobre el salto de palabra, aunque el OP no dijo si se deseaba –

2

Aunque la respuesta de Andrew es claramente superior, antes, también conseguí que funcione con [^(?:a|em|strong)].

Cuestiones relacionadas