Pattern.DOTALL with String.replaceAll - PullRequest
20 голосов
/ 28 июня 2011

У меня есть многострочный документ HTML, из которого я пытаюсь получить кое-что. Я использую регулярное выражение Java (я знаю - парсеры XML бла-бла-бла, просто потерпите меня здесь, пожалуйста :)).

    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 Ответ

32 голосов
/ 28 июня 2011

Прикрепите (?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 из ненадежного источника, не используйте регулярные выражения и не используйте теги blacklist .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...