Pattern.DOTALL со String.replaceAll
У меня есть многострочный HTML-документ, из которого я пытаюсь получить некоторые вещи. Я использую java regex (я знаю - 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
У меня есть этот HTML-код в строке: input.
input = input.replaceAll("<object classid=\"java:com.sun.java.help.impl.JHSecondaryViewer.*?object>", "buh bye!");
Очевидно, он не работает. ОДНАКО, я могу получить соответствие шаблону, если я использую pattern.compile с Pattern.DOTALL.
Итак, мой вопрос: как я могу сделать что-то вроде Pattern.DOTALL с string.replaceall?
Ответы
Ответ 1
Прикрепите (?s)
к передней части шаблона:
input = input.replaceAll("(?s)<object classid=\"java:com\\.sun\\.java\\.help\\.impl\\.JHSecondaryViewer.*?object>", "buh bye!");
Из Javadoc:
Режим Dotall также можно включить с помощью выражения встроенного флага (?s)
. (s
является мнемоником для режима "однострочный", что и называется в Perl.)
Другие флаги работают таким же образом
Специальные конструкции (не захватывающие)
...
(?idmsux-idmsux)
Ничего, но включает флажки соответствия я d m s u x on-off
На стороне примечания, если ваша цель - удалить небезопасные объекты из HTML из ненадежного источника, не используйте регулярные выражения и не используйте черный список теги.