匹配HTML正则表达式java中的第n个数字

时间:2013-05-07 09:40:07

标签: java regex

您好我需要在字符串

中找到第二次匹配

我有一个像“

这样的字符串
<span class="test">
  example
</span>
<span class="test">
  example1
</span>
<span class="test">
  example2
</span>

我需要从我尝试(?:<span class="test"){2}(.*?)</span>的内容中提取示例1,但它无效。

请不要说不使用带有正则表达式的HTML解析器。我知道我别无选择。

4 个答案:

答案 0 :(得分:1)

以下正则表达式:

<span class="test">\s*(.*?)\s*</span>

将产生以下捕获:

        [0] =>   example
        [1] =>   example1
        [2] =>   example2

你可以参考你喜欢的任何一个。

但是如果由于某种原因你不能引用一个特定的捕获(我无法想象为什么不,所以这是一种学术性的),那么以下将返回第二个:

<span class="test">(?s).*?</span>\s*<span class="test">\s*(.*?)\s*</span>

请注意(?s)指定的“单行模式”的使用。这意味着.也会匹配换行符。在Java中,如果您使用DOTALL方法,可以使用.compile()选项启用此功能。

答案 1 :(得分:0)

试试这个:

(?:<span class="test".*?</span>)\s*<span[^>]*>\s*(.*?)\s*</span>

所需的结果是唯一匹配的组。为此,您需要使用DOTALL标志。

答案 2 :(得分:0)

试试这个:

String text = "<span class=\"test\">  example</span>\n<span class=\"test\">  example1</span>\n<span class=\"test\">  example2</span>";
Matcher m1 = Pattern.compile("<span class=\\\"test\\\">(.*?)<\\/span>").matcher(text);
ArrayList<String> matches = new ArrayList<String>();
while(m1.find()){
   matches.add(m1.group(1).trim());
}
System.out.println(matches.get(1));

答案 3 :(得分:-1)

你的正则表达式应如下所示:

<span class="test">example([0-9]*)</span>

然后你可以用p = Pattern.compile( regex )编译一个模式,并获得一个m = p.matcher( str )的匹配器。

通过调用m.find(),匹配器将找到下一个模式。 m.group( 1 )会在示例后面给出数字。

要获得第二次出现,请两次调用m.find()并致电m.group( 1 )