2014-06-10 77 views
2

我有一个模式来匹配像仅匹配“<span>东西</span>行尾”,而不是“<span>东西</span></span>”

... 
<span class="count">1036</span> 
... 

但我并不想匹配

<span class="count">1036</span></span> 

因为它会赶上

1036</span> 

但无论如何,我不想赶上双倍,因为我不需要这些数据。 我需要跨度和行尾之间的数据。

我\ n试图在跨度的结束,但它没有工作...... 这里的模式:

private static final Pattern COUNT = Pattern.compile("<span class=\"count\">(.+?)</span> "); 

谢谢你的答案

+0

我会改变'+'它匹配任何东西'[?^<] +'这会马上tch不是' pavlindrom

+2

永远不要使用正则表达式来解析html。使用html解析器 – jackcogdill

回答

0

为“正则表达式代码行尾“为$

尝试:行

private static final Pattern COUNT = Pattern.compile("<span class=\"count\">(.+?)</span>$ "); 
+0

这并不能解决问题,catch组仍然可以匹配''。 – pavlindrom

+0

是的,你是对的,它肯定会要求否定一个开角尖括号。 – Woodham

0

使用多线路开关(?m),这使得^和$匹配的开始/结束。

Pattern COUNT = Pattern.compile("(?m)<span class=\"count\">(.+?)</span>$"); 
0

尝试用封闭的括号()内的正则表达式的分组功能,它使用Matcher#group(1)得到。

正则表达式

<span class="count">([^<]*?)</span> 

DEMO

示例代码:

Pattern pattern = Pattern.compile("<span class=\"count\">([^<]*?)</span>"); 
Matcher matcher = pattern.matcher("<span class=\"count\">1036</span></span>"); 
while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

输出:

1036 
+0

查找类似问题[here](http://stackoverflow.com/questions/24124033/split-string-by-tag-java) – Braj

相关问题