Java Jsoup getElementsByAttributeValueMatching

Java Jsoup getElementsByAttributeValueMatching,java,regex,jsoup,Java,Regex,Jsoup,[JSoup讨论页面建议我在这里提问。] 所以,我不是正则表达式专家,但我想知道我从jsoup得到的结果 getElementsByAttributeValueMatching()方法 如果我有一个html页面,其中包含以下链接: <a href="/tweb/tiles/twr/EIDS_AT_20130108T134335/01/">Parent Directory</a> <a href="1357681618315/">1357681618315/&l

[JSoup讨论页面建议我在这里提问。]

所以,我不是正则表达式专家,但我想知道我从jsoup得到的结果 getElementsByAttributeValueMatching()方法

如果我有一个html页面,其中包含以下链接:

<a href="/tweb/tiles/twr/EIDS_AT_20130108T134335/01/">Parent Directory</a>
<a href="1357681618315/">1357681618315/</a>
<a href="1357681649996/">1357681649996/</a>
希望只得到2个只有数字的链接(最后还有一个斜杠)

然而,我得到了所有3个链接回来

我编写了一个快速测试程序,用3个href字符串检查java的模式匹配器对该正则表达式的响应,它只返回两个带有数字的正则表达式,正如我所期望的:

String a = "/tweb/tiles/twr/EIDS_AT_20130108T134335/01/";
String b = "1357681618315/";
String c = "1357681649996/";

Pattern p = Pattern.compile("[0-9]+/");

System.out.println("a:"+ p.matcher(a).matches());
System.out.println("b:"+ p.matcher(b).matches());
System.out.println("c:"+ p.matcher(c).matches());
返回: a:错 b:是的 c:是的

所以,我的问题是,我错过了什么

谢谢, Linus

Jsoup使用,而不是。因此,您需要自己提供
^
$

Elements dirs = baseDir.getElementsByAttributeValueMatching(
    "href", Pattern.compile("^[0-9]+/$"));
以下是解释差异的相关javadoc摘录(我的重点):

找到

返回:
true
当且仅当输入序列的子序列匹配此匹配器的模式时

比赛

返回:
true
当且仅当整个区域序列匹配此匹配器的模式时


至于为什么Jsoup使用
find()
而不是
matches()
,这是您必须向其创建者提出的问题。

当我们在Jsoup中使用select时,您可以使用
[attr*=valContaining]
[attr~=regex]

元素dirs=baseDir.select([attr~=regex])

属性 regex------>regex应用于该属性的值


请参阅此处的文档

。我想医生可能会提到这一点。非常感谢!
Elements dirs = baseDir.getElementsByAttributeValueMatching(
    "href", Pattern.compile("^[0-9]+/$"));