Разбор строки с использованием Pattern.compile - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь разобрать следующую строку, myline в Java, и она продолжает выдавать нулевое значение.

Вот моя попытка получить '000000010'.

myline = "<status> <id>000000010</id> <created_at>2012/03/11</created_at> <text>@joerogan Played as Joe Savage Rogan in Undisputed3 Career mode, won Pride GP, got UFC title shot against Shields, lost 3 times, and retired</text> <retweet_count>0</retweet_count> <user> <name>Siggi Eggertsson</name> <location>Berlin, Germany</location> <description></description> <url>http://www.siggieggertsson.com</url> </user></status>"
p = Pattern.compile("(?i)<id.*?>(.+?)</id>", Pattern.DOTALL);
m = regex.matcher(myline);
id =m.group(1);

Любой совет?

Ответы [ 4 ]

3 голосов
/ 24 марта 2012

Настоятельно рекомендуем использовать синтаксический анализатор XML. Есть один встроенный в Java, вот пример решения вашей проблемы. Обработчики исключений для простоты опущены.

DocumentBuilderFactory factory = DocumentBuilderFactory
        .newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
String input = "<status> <id>000000010</id> <created_at>2012/03/11</created_at> <text>@joerogan Played as Joe Savage Rogan in Undisputed3 Career mode, won Pride GP, got UFC title shot against Shields, lost 3 times, and retired</text> <retweet_count>0</retweet_count> <user> <name>Siggi Eggertsson</name> <location>Berlin, Germany</location> <description></description> <url>http://www.siggieggertsson.com</url> </user></status>";
Document document = builder.parse(new InputSource(new StringReader(
        input)));
String value = document.getElementsByTagName("id").item(0)
        .getTextContent();
System.out.println(value);
2 голосов
/ 24 марта 2012

Во-первых, вы не должны использовать регулярные выражения для анализа XML.

Но кроме этого, вы не используете регулярное выражение правильно.Недостаточно создать экземпляр объекта matcher, вам также нужно сказать ему что-то сделать:

0 голосов
/ 24 марта 2012

это работает

String myline = "<status> <id>000000010</id> <created_at>2012/03/11</created_at> <text>@joerogan Played as Joe Savage Rogan in Undisputed3 Career mode, won Pride GP, got UFC title shot against Shields, lost 3 times, and retired</text> <retweet_count>0</retweet_count> <user> <name>Siggi Eggertsson</name> <location>Berlin, Germany</location> <description></description> <url>http://www.siggieggertsson.com</url> </user></status>";
Pattern p = Pattern.compile(".*<id>(.+)</id>.*");
Matcher m = p.matcher(myline);
if (m.matches()) {
    String id = m.group(1);
    System.out.println(id);
}

[ Edit :] это также работает, и это лучше:

String myline = "<status> <id>000000010</id> <created_at>2012/03/11</created_at> <text>@joerogan Played as Joe Savage Rogan in Undisputed3 Career mode, won Pride GP, got UFC title shot against Shields, lost 3 times, and retired</text> <retweet_count>0</retweet_count> <user> <name>Siggi Eggertsson</name> <location>Berlin, Germany</location> <description></description> <url>http://www.siggieggertsson.com</url> </user></status>";
Pattern p = Pattern.compile("<id>(.+)</id>");
Matcher m = p.matcher(myline);
if (m.find()) {
    String id = m.group(1);
    System.out.println(id);
}
0 голосов
/ 24 марта 2012

Этот веб-сайт может предоставить вам некоторую информацию о синтаксическом анализе XML с использованием Java - http://www.java -samples.com / showtutorial.php? Tutorialid = 152

...