如何合并正则表达式提取curl抓取页面中指定span内的数字?
直接合并正则,一次提取目标数字
你可以直接修改原来匹配<span>标签的正则,把数字捕获的逻辑整合进去,这样就能一步拿到想要的数字,不用分两次匹配。
根据你描述的原始HTML结构(内容由<br />分隔),我们可以调整正则,跳过<span>内的前置文本,直接捕获后面的数字:
// 针对原始HTML中用<br />分隔的情况 $pattern4 = '/<span class="_c1 ei_card_subtitle _c1">.*?<br \/>(\d+)</span>/i'; $cc = preg_match_all($pattern4, $ccpage, $matches); // 直接输出捕获到的数字 echo $matches[1][0];
如果你的实际匹配结果里是用-分隔的(比如你提到的返回内容是“some text - digits”),可以把正则里的分隔符换成\- :
// 针对返回内容用"- "分隔的情况 $pattern4 = '/<span class="_c1 ei_card_subtitle _c1">.*?\- (\d+)</span>/i'; $cc = preg_match_all($pattern4, $ccpage, $matches); echo $matches[1][0];
为什么这样写?
.*?是非贪婪匹配,会匹配从<span>开始到第一个分隔符(<br />或-)的所有前置内容,避免匹配到其他无关的标签或内容;(\d+)专门捕获连续的数字,把它放在分隔符后面,就能精准定位到你要的数字部分;- 整个正则还是保留了对目标
<span>标签的匹配,确保我们只从正确的标签里提取内容。
如果数字前后有多余的空格,你可以把(\d+)改成(\s*\d+\s*),这样会自动忽略数字前后的空白字符,不过如果你的数字是纯数字没有空格,用(\d+)就足够了。
内容的提问来源于stack exchange,提问作者Timo
相关产品推荐
相关产品推荐

