Jsoup 选择器正则表达式匹配

Jsoup Selector Regex matching

我只想获取具有此 id 模式的元素 "answer-[0-9]*"

我在 select "div[id~=answer-[0-9]*]"

中使用这个正则表达式

匹配的元素是:

<div class="post-text" id="answer-45881">

<div class="hidden modal modal-flag" id="answer-flag-modal45881">

我必须更改什么才能只得到第一个?

它似乎搜索 id 以包含此模式,而不是匹配。

"div[id~=answer-[0-9]*$]"

那应该可以了。

基于 official tutorial

中的示例
[attr~=regex]: elements with attribute values that match the regular expression; 
e.g. img[src~=(?i)\.(png|jpe?g)]

看起来 jsoup 只是检查属性是否包含一些可以与正则表达式匹配的 部分 (如本例中的 .png.jpg),如果属性的整个值都与正则表达式匹配,则不会。

要检查正则表达式是否匹配整个字符串,您需要放置 anchors 表示字符串的开头 ^ 和字符串的结尾 $

另外,如果你想让数字部分成为强制性的,你可能应该使用 + 而不是 *

所以试试 div[id~=^answer-[0-9]+$]

* 运算符表示 "zero or more" 次,因此它仍会匹配第二个示例。您需要使用 + 运算符来表示 "one or more" 次。所以,你的语法是:

div[id~=answer-[0-9]+]