我正在尝试使用正则表达式来从类似
的字符串中提取数据<B Att="text">Test</B><C>Test1</C>
提取的输出需要是Test和Test1。这就是我到目前为止所做的事情:
public class HelloWorld {
public static void main(String[] args)
{
String s = "<B>Test</B>";
String reg = "<.*?>(.*)<\\/.*?>";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(s);
while(m.find())
{
String s1 = m.group();
System.out.println(s1);
}
}
}
但这会产生结果<B>Test</B>
。谁能指出我做错了什么?
答案 0 :(得分:7)
三个问题:
试试这个:
String s = "<B Att=\"text\">Test</B><C>Test1</C>"; // <-- Fix 1
String reg = "<.*?>(.*?)</.*?>"; // <-- Fix 2
// ...
String s1 = m.group(1); // <-- Fix 3
你也不需要逃避正斜杠,所以我删除了它。
在ideone上看到它正在运行。
(另外,不要使用正则表达式来解析HTML - 使用HTML解析器。)
答案 1 :(得分:2)
如果您正在使用eclipse,那么有一个很好的插件可以帮助您检查正则表达式,而无需编写任何类来检查它。 这是链接: http://regex-util.sourceforge.net/update/ 您需要通过选择Window - &gt;来显示视图。显示视图 - &gt;其他,而不是Regex Util
我希望它能帮助你与正则表达式作斗争
答案 2 :(得分:1)
看起来你正试图在XML和/或HTML上使用正则表达式。我建议不要使用正则表达式,而是创建一个解析器或词法分析器来处理这种类型的安排。
答案 3 :(得分:1)
我认为处理XML
节点的最佳途径只是将其视为XML
。
如果你真的想坚持regex
尝试:
<B[^>]*>(.+?)</B\s*>
了解您将始终获得B
代码的价值。
或者,如果您想要任何标签的值,您将使用以下内容:
<.*?>(.*?)</.*?>