当前位置: 首页 > 面试题库 >

带String.replaceAll的Pattern.DOTALL

黄磊
2023-03-14
问题内容

我有一个多行HTML文档,我试图从中获取一些东西。我正在使用java的正则表达式(我知道-XML解析器bla 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

我已经在字符串中输入了此HTML:输入。

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

显然,它不起作用。但是,如果将Pattern.compile与Pattern.DOTALL一起使用,则可以获得模式匹配。

所以,我的问题是-如何使用string.replaceall做类似Pattern.DOTALL的事情?


问题答案:

附加(?s)到图案的前面:

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

从Javadoc:

也可以通过嵌入式标志表达式启用Dotall模式(?s)。(这s是“单行”模式的助记符,在Perl中称为“单行”模式。)

其他标志也以这种方式工作

特殊构造(非捕获)

(?idmsux-idmsux) 什么都没有,但是将匹配标志idmsux开启-关闭

附带说明一下,如果您的目标是从不受信任的来源中删除HTML中的不安全对象,请不要使用正则表达式,也不要将标签列入黑名单。



 类似资料:
  • 问题内容: 我有上面的代码,但我不知道为什么会产生 而不是 非常感谢 问题答案: 使用量词来匹配1个或多个空格,而不是:- 表示匹配0个或多个空格,并且将在每个字符之前匹配一个空字符,并由一个空格代替。

  • 问题内容: 用java 方法剥离输入的字符串(如MY-CORP \ My.Name)中的MY-CORP \部分的正则表达式是什么,这样我只能得到My.Name部分? 我试过了 但是我 在索引4 ^附近 遇到了 意外的内部错误。 * 问题答案: 您的问题是反斜杠在Java字符串和正则表达式中都有特殊含义。因此,您需要在Java源代码中使用四个斜杠,将两个斜杠传递给regex解析器以在regex中获得

  • 问题内容: 我正在编辑从tesseract ocr获得的一些电子邮件。 这是我的代码: 但是输出不正确。 输入: 输出: 但是,当我在每次替换后将结果分配给新的String时,它都能正常工作。为什么在同一字符串中连续分配不起作用? 问题答案: 您将在Javadoc中的String.replaceAll()中注意到,第一个参数是正则表达式。 句点()和管道()以及花括号()都有特殊的含义。您需要对它

  • 问题内容: 我需要对一段字符串进行简单的字符串替换操作。我遇到了以下问题,希望能得到一些建议。 在我得到的原始字符串中,我可以将字符串替换为其他字符串。 但是,在相同的原始字符串中,如果我想替换一个很长的字符串,例如以下字符串,它将无法正常工作。通话后,一切都不会被替换。 我尝试了以下两种方法: 提前致谢。 问题答案: 您需要掌握替换结果并进一步使用它: 说明:Java中的字符串是 不可变的 。的

  • 问题内容: Javadoc说$ 1,$ 2等可以用来引用匹配组,但是使用时如何引用替换字符串中最新找到的组呢? 即有一个字符串和一个正则表达式,我希望能够做类似get的事情,但是Java给了我。 问题答案: 应该管用: 正如注释中已经指出的那样,您必须在正则表达式中标记捕获组。这就是括号的作用。然后,您必须使用来引用该捕获组,这是第一个捕获组。将是整个比赛(也在注释中指出),但将无法正常工作。

  • 问题内容: 我有一个包含以下文本的字符串 我想将每个 孤立的 br 替换为 问题是我想避免将字符串转换为 我想做的是将字符串(使用replaceAll)转换为 我敢肯定这很简单,但是我的正则表达式不正确。 我的正则表达式 应该 找到“空白”,“ b”,“ r”,“空白”或“空白”,“ b”,“ r”,“行尾” 但是它错过了我字符串中的最后一个“ br” 我究竟做错了什么??TKS! 问题答案: 用