2011-06-27 13 views
15

Tengo un documento HTML de varias líneas del que estoy tratando de obtener algunas cosas. Estoy usando la expresión regular de Java (lo sé - analizadores XML bla bla bla, solo tengan paciencia conmigo aquí por favor :)).Pattern.DOTALL con String.replaceAll

dfahfadhadaaaa<object classid="java:com.sun.java.help.impl.JHSecondaryViewer" width="14" height="14"> 
<param name="content" value="../Glossary/glInterlinkedTask.html"> 

<param name="text" value="interlinked task"> 
<param name="viewerActivator" value="javax.help.LinkLabel"> 
<param name="viewerStyle" value="javax.help.Popup"> 
<param name="viewerSize" value="390,340"> 
<param name="textFontFamily" value="SansSerif"> 
<param name="textFontWeight" value="plain"> 
<param name="textFontStyle" value="italic"> 
<param name="textFontSize" value="12pt"> 
<param name="textColor" value="blue"> 

<param name=iconByID" value=""> 
</object> 
sjtsjsrjrsjsrjsrj 

Tengo este HTML en una cadena: entrada.

input = input.replaceAll("<object classid=\"java:com.sun.java.help.impl.JHSecondaryViewer.*?object>", "buh bye!"); 

Obviamente, no está funcionando. SIN EMBARGO, puedo obtener una coincidencia de patrón si uso pattern.compile con Pattern.DOTALL.

Entonces, mi pregunta es: ¿cómo puedo hacer algo como Pattern.DOTALL con string.replaceall?

+1

Aha! Encontré la bandera en línea "(? S)". Es el equivalente de DOTALL si lo colocas al comienzo de la expresión regular. Problema resuelto. – guywhoneedsahand

+0

¿Es este un problema importante? ¿No puedes simplemente llamar a 'Pattern.compile', etc., o escribir un contenedor? –

+1

¿Prefunde '(? S)' al patrón? Funciona en otros idiomas, no está seguro acerca de Java. – ninjalj

Respuesta

28

Acople (?s) a la parte delantera de su patrón:

input = input.replaceAll("(?s)<object classid=\"java:com\\.sun\\.java\\.help\\.impl\\.JHSecondaryViewer.*?object>", "buh bye!"); 

Desde el Javadoc:

modo dotall también se puede activar a través de la expresión de la bandera incrustada (?s). (El s es una regla mnemotécnica para el modo "de una sola línea", que es lo que se llama en Perl.)

Otras banderas funcionan de esta manera, así

construcciones especiales (no captura)

...

(?idmsux-idmsux) Nada, pero resulta banderas de los partidos idmsux on - off

En una nota lateral, si su objetivo es eliminar objetos inseguros de HTML de una fuente que no es de confianza, no use expresiones regulares, y no las etiquetas blacklist.

+1

+1 consejo muy bueno! – Bohemian

Cuestiones relacionadas