Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在标记之间提取数据的Java正则表达式_Java_Regex - Fatal编程技术网

用于在标记之间提取数据的Java正则表达式

用于在标记之间提取数据的Java正则表达式,java,regex,Java,Regex,我正在尝试创建一个正则表达式,它从字符串中提取数据,如 <B Att="text">Test</B><C>Test1</C> test1 提取的输出需要是Test和Test1。这就是我到目前为止所做的: public class HelloWorld { public static void main(String[] args) { String s = "<B>Test</B>";

我正在尝试创建一个正则表达式,它从字符串中提取数据,如

<B Att="text">Test</B><C>Test1</C>
test1
提取的输出需要是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);
        }
    }
}
公共类HelloWorld{
公共静态void main(字符串[]args)
{
字符串s=“测试”;
字符串reg=“(*)”;
模式p=模式编译(reg);
匹配器m=匹配器p;
while(m.find())
{
字符串s1=m.group();
系统输出打印LN(s1);
}
}
}
但这会产生结果
Test
。有人能指出我做错了什么吗?

三个问题:

  • 您的测试字符串不正确
  • 组中需要一个非贪婪修饰符
  • 您需要指定所需的组(组1)
试试这个:

String s = "<B Att=\"text\">Test</B><C>Test1</C>"; // <-- Fix 1
String reg = "<.*?>(.*?)</.*?>";                   // <-- Fix 2
// ...
String s1 = m.group(1);                            // <-- Fix 3

String s=“test1”// 看起来您正试图在XML和/或HTML上使用正则表达式。我建议不要使用正则表达式,而是创建一个解析器或lexer来处理这种类型的排列。

我认为处理和获取
XML
节点值的最佳方法就是将其作为
XML
处理

如果您真的想坚持使用
regex
请尝试:

<B[^>]*>(.+?)</B\s*>

如果你正在使用eclipse,有一个很好的插件可以帮助你检查正则表达式,而无需编写任何类来检查它。 以下是链接: 您需要通过选择窗口->显示视图->其他来显示视图,而不是选择正则表达式Util


我希望它能帮助您处理正则表达式

为什么不使用XML解析器呢?我没有复杂的XML文件。这些节点没有任何子节点(即平面结构)。所以我认为正则表达式已经足够好了。谢谢..但是这会为第一次迭代生成输出
Test
,并在第二次迭代生成输出
Test1
。但是我只想要
Test
Test1
作为输出。@Asha:String s1=m.group(1);现在工作正常..我以前试过,但索引为0。没有意识到它是从1开始的。@Asha:0组表示整个比赛。
<.*?>(.*?)</.*?>