Java Jsoup getElementsByAttributeValueMatching
[JSoup讨论页面建议我在这里提问。] 所以,我不是正则表达式专家,但我想知道我从jsoup得到的结果 getElementsByAttributeValueMatching()方法 如果我有一个html页面,其中包含以下链接: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
<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:是的
所以,我的问题是,我错过了什么
谢谢,
LinusJsoup使用,而不是。因此,您需要自己提供^
和$
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]+/$"));