Java replaceAll с регулярным выражением - PullRequest
1 голос
/ 23 июня 2010

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

...<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 ]

3 голосов
/ 23 июня 2010

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

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

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

0 голосов
/ 23 июня 2010

Это ужасное не решение, но вы можете использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...