Строка Java, управляющая тегами HTML - PullRequest
0 голосов
/ 30 октября 2010

У меня есть строка Java с текстом и HTML:

<title>test title</title>
blabla bla more text

То, чего я пытаюсь достичь, состоит из двух частей:

1) Извлечь содержимое <title></title> и сохранить его в отдельной строке.

2) Удалить эту часть исходной строки: <title>test title</title>

Таким образом, конечный результат будет что-то вроде

originalString:

<title>test title</title>
blabla bla more text

NewString:

blabla bla more text

pageTitle: test title

Как мне этого добиться? регулярные выражения? Я не могу понять это ...

Ответы [ 3 ]

1 голос
/ 30 октября 2010

Вот как вы можете использовать регулярное выражение для извлечения текста между тегами заголовка:

    String s = "<title>test title</title>";
    Pattern p = Pattern.compile("<title>(.*?)</title>");
    Matcher m = p.matcher(s);
    while(m.find()){
        System.out.println(m.group(1));
    }
1 голос
/ 30 октября 2010

Не используйте регулярные выражения для разбора HTML !Попробуйте использовать JTidy или любой из этих парсеров HTML с открытым исходным кодом для Java, которые соответствуют вашим требованиям.

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

0 голосов
/ 30 октября 2010

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

package org.apache.people.mclark.examples.regex;
import java.util.regex.*;
public class Regex1 {
    public static void main(String[] args) {
        final String subjectString = "<title>test title</title>\n" +
          "blabla bla more text"; 
        Pattern regex = Pattern.compile("<title>(.*?)</title>(.*)",
                Pattern.DOTALL);
        Matcher regexMatcher = regex.matcher(subjectString);
        if (regexMatcher.find()) {
            String pageTitle = regexMatcher.group(1);
            String leftOvers = regexMatcher.group(2);
            System.out.println("pageTitle[" + pageTitle + "]");
            System.out.println("leftOvers[" + leftOvers + "]");
        } else {
            System.out.println("no match");
        }
    }
}

Я умываю руки от всякого плохого поведения!

...