Java正则表达式进行多组多行匹配

来源:互联网 发布:mac花屏两秒自动恢复 编辑:程序博客网 时间:2024/06/06 00:52
    public static void main(String[] args)    {        String str = "<div title=aaa>bbbb</div>ccc<div title=aaa>bbbb</div>ccc<div title=aaa>bbbb</div>ccc<div title=aaa>bbbb</div>ccc";        String pat = "<div title=(.*?)>(.*?)</div>.*?";        Pattern p = Pattern.compile(pat);        Matcher m = p.matcher(str);        while (m.find())        {               for (int i = 0; i < m.groupCount() + 1; i++)            {                System.out.println(m.group(i));            }            System.out.println("====================");        }    }


输入的结果是:

<div title=aaa>bbbb</div>
aaa
bbbb
====================
<div title=aaa>bbbb</div>
aaa
bbbb
====================
<div title=aaa>bbbb</div>
aaa
bbbb
====================
<div title=aaa>bbbb</div>
aaa
bbbb
====================


根据我的软件测试,输出的结果是没有错的:



但是这里有一个需要注意的地方,仔细看代码里的for循环

for (int i = 0; i < m.groupCount() + 1; i++)

没错,这里要+1。

因为groupCount方法的API说明如下:

  • 返回此匹配器模式中的捕获组数。 
  • 根据惯例,零组表示整个模式。它不包括在此计数中。 
  • 任何小于等于此方法返回值的非负整数保证是此匹配器的有效组索引。 

所以这里要+1,而且group(0)表示的是匹配到的整个文本,不要忘记了。


PS:这里在while循环执行完之前,好像是没法知道匹配了多少行的,如果有的话,请留言告诉我,谢谢。

0 0
原创粉丝点击