Я пытаюсь сопоставить несколько блоков кода стиля CSS в документе HTML.
Стандартный ответ: не используйте регулярные выражения для разбора HTML. regex не может надежно анализировать HTML, независимо от того, насколько сложным и умным вы делаете свое выражение. Если вы не уверены, что точный формат целевого документа полностью установлен, обработка строк или регулярных выражений недостаточна, и вы должны использовать анализатор HTML.
(<style type="text/css">)(.*)(</style>)
Это жадное выражение. (. *) В середине будет соответствовать столько, сколько возможно. Если у вас есть два блока стиля:
<style type="text/css">1</style> <style type="text/css">2</style>
тогда он будет счастливо совпадать с '1
) совпадать при первой возможности.
Должен ли я вызвать метод 'find' для получения следующего совпадения?
Да, и вы должны были использовать его, чтобы получить первый матч тоже. Обычная идиома:
while (matcher.find()) {
s= matcher.group(n);
}
Обратите внимание, что стандартная обработка строк (indexOf и т. Д.) Может оказаться для вас более простым подходом, чем регулярное выражение, поскольку вы используете только полностью фиксированные строки. Тем не менее, стандартный ответ по-прежнему применяется.