您好,我需要在字符串中找到第二次匹配项
我有一个像“
<span class="test">
example
</span>
<span class="test">
example1
</span>
<span class="test">
example2
</span>
我需要从我尝试过的内容中提取示例 1,(?:<span class="test"){2}(.*?)</span>但它不起作用。
请不要说不要将 HTML 解析器与正则表达式一起使用。我知道我别无选择。
以下正则表达式:
<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). 这意味着.也将匹配换行符。DOTALL在 Java 中,如果您使用该.compile()方法,则可以通过使用该选项来启用。
试试这个:
(?:<span class="test".*?</span>)\s*<span[^>]*>\s*(.*?)\s*</span>
期望的结果是唯一匹配的组。为此,您需要使用DOTALL标志。
试试这个:
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));