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]*$]"
那应该可以了。
中的示例
[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]+]
我只想获取具有此 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]*$]"
那应该可以了。
[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]+]