Pattern.DOTALL with String.replaceAll
I have a multiline HTML document that I am trying to get some stuff from. I'm using java's regex (I know - XML parsers bla bla bla, just bear with me here please :) ).
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
I've got this HTML in a string: input.
input = input.replaceAll("<object classid=\"java:com.sun.java.help.impl.JHSecondaryViewer.*?object>", "buh bye!");
Obviously, it's not working. HOWEVER, I can get a pattern match if I use pattern.compile with Pattern.DOTALL.
So, my question is - how can I do something like Pattern.DOTALL with string.replaceall?
Attach (?s)
to the front of your pattern :
input = input.replaceAll("(?s)<object classid=\"java:com\\.sun\\.java\\.help\\.impl\\.JHSecondaryViewer.*?object>", "buh bye!");
From the Javadoc:
Dotall mode can also be enabled via the embedded flag expression
(?s)
. (Thes
is a mnemonic for "single-line" mode, which is what this is called in Perl.)
Other flags work this way as well
Special constructs (non-capturing)
...
(?idmsux-idmsux)
Nothing, but turns match flags i d m s u x on - off
On a side note, if your goal is to remove unsafe objects from HTML from an untrusted source, please don't use regular expressions, and please don't blacklist tags.
精彩评论