我有一个多行HTML文档,我试图从中获取一些东西.我正在使用java的正则表达式(我知道 - XML解析器bla bla bla,请在这里忍受我:)).
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
Run Code Online (Sandbox Code Playgroud)
我在字符串中输入了这个HTML:输入.
input = input.replaceAll("<object classid=\"java:com.sun.java.help.impl.JHSecondaryViewer.*?object>", "buh bye!");
Run Code Online (Sandbox Code Playgroud)
显然,它不起作用.但是,如果我将Pattern.compile与Pattern.DOTALL一起使用,我可以获得模式匹配.
所以,我的问题是 - 如何使用string.replaceall执行Pattern.DOTALL之类的操作?
Mik*_*uel 33
贴(?s)在图案的正面:
input = input.replaceAll("(?s)<object classid=\"java:com\\.sun\\.java\\.help\\.impl\\.JHSecondaryViewer.*?object>", "buh bye!");
Run Code Online (Sandbox Code Playgroud)
来自Javadoc:
也可以通过嵌入的标志表达式启用Dotall模式
(?s).(这s是"单行"模式的助记符,这是在Perl中调用的.)
其他标志也以这种方式工作
特殊构造(非捕获)
...
(?idmsux-idmsux)没什么,但是开启匹配标志idmsux开 - 关
另外,如果您的目标是从不受信任的来源中删除HTML中的不安全对象,请不要使用正则表达式,请不要将标记列入黑名单.