RegEx для HTML заменить - PullRequest
       13

RegEx для HTML заменить

1 голос
/ 21 апреля 2011

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

Пример: <img class="TEST">asd TEST asd dsa asd </img>
и мне нужно получить только второй «ТЕСТ».

RegExя ищу должен выглядеть как >[^<]*TEST, но это регулярное выражение также принимает символы перед словом ТЕСТ.Можно ли выбрать только слово ТЕСТ?но представьте себе и другие комбинации (я не думаю, что «ТЕСТ» - хорошее решение, как только текст может содержать и другие символы)

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

Прежде всего, регулярное выражение не является хорошим вариантом для разбора html. Существует множество расширенных html-анализаторов, которые вы можете использовать.

Но если вы настаиваете на использовании регулярного выражения, вот это регулярное выражение;

(?<=>.*)TEST(?=.*<)

для Java,

(?<=>.{0,100000})TEST(?=.{0,100000}<)

для получения дополнительной информации, почему мы не можем использовать * или + с регулярным выражением lookbehind в Java, Обратное выражение Regex без очевидной максимальной длины в Java

1 голос
/ 21 апреля 2011

Прежде всего, как было сказано и будет сказано снова, использование регулярных выражений для XML обычно является плохой идеей. Но для действительно простых случаев это может сработать, особенно если вы можете жить с неоптимальными результатами.

Итак, просто поместите тест в группу и замените только группу

Что-то вроде

Pattern replacePattern = Pattern.compile(">[^<]*(TEST)");
Matcher matcher = replacePattern.matcher(theString);
String result = theString.substr(1,matcher.start(1)) + replacement + theString.substr(matcher.end(1));

Отказ от ответственности: не тестировался, может иметь некоторые посторонние. Но концепция должна быть ясной.

0 голосов
/ 21 апреля 2011

Как насчет того, если "TEST" находится внутри другого тега, чем, например, внутри тега body, или в этом отношении внутри тега html?

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