Java replaceAll с регулярным выражением

У меня есть такой текст:

...<span>my name is bob and I live in </p><p>America</span>...

Я бы заменил этот текст в

...<span>my name is bob and I live in </span></p><p><span>America</span>...

Я знаю функцию replace(), но не знаю регулярных выражений, как это можно сделать?

Имейте в виду, что можно правильно закрыть другие теги span перед </p>, например:

...<span>my name is bob</span> and <span>I live in </p><p>America</span>... 

2 ответа

В общем, вы не можете анализировать HTML с регулярными выражениями, потому что это не обычный язык.

Если вы генерируете строку в определенном месте и знаете, что это просто само значение, тогда это может быть возможно. Однако в этом случае он вряд ли будет чистым, потому что вы не хотите встраивать теги во что-то, что должно быть просто CDATA. Если вы начинаете синтаксический анализ документов, включая теги, в общем случае невозможно написать правильное регулярное выражение, которое будет отражать ваш случай. Если ваш документ использует очень ограниченный синтаксис, он может это сделать, но я бы с осторожностью отнесся к этому, так как сомневаюсь, что кто-либо запомнит соблюдение этих ограничений с учетом будущего рефакторинга.

Лучшее решение состоит в том, чтобы использовать что-то вроде DOM для перебора самого сгенерированного HTML и изменения дерева узлов. В качестве альтернативы, если вы действительно выводите чистый XHTML, вы можете использовать XSLT для выполнения этого перевода.

Это ужасное не решение, но вы можете использовать String.replace(CharSequence, CharSequence) выполнить замену строки. Он не уважает правильность HTML-кода и т. Д. Он просто слепо подставляет одну строку для другой.

Это может или не может работать для вас. Однако, как и любой подход к HTML с использованием регулярных выражений, он, скорее всего, работает только иногда.

System.out.println(
    "bleh </p><p> blah </p><p> blih </p></p> bloh"
    .replace("</p><p>", "</span></p><p><span>")
);
// "bleh </span></p><p><span> blah </span></p><p><span> blih </p></p> bloh"
Другие вопросы по тегам