Java正则仅匹配1个结果:爬取OSRS排行榜用户名异常求助
问题核心原因
你写的正则使用了贪婪匹配模式的.*,默认会尽可能匹配最多的字符:会从页面中第一个user1=位置开始,一直匹配到整个HTML源码末尾最后一个">才停止,所以整个匹配过程只会触发1次m.find(),拿到的group(1)其实包含了第一个用户名到源码末尾的所有内容,自然只能提取到第一个用户名。
修复方案
把正则规则替换为非贪婪匹配,或者用排除型字符组限制匹配范围即可,两种写法选其一:
- 写法1(非贪婪匹配,逻辑直观):
user1=(.*?)" - 写法2(排除型字符组,匹配效率更高):
user1=([^"]+)"
修改后不需要再对group(1)做split处理,group(1)直接就是完整的用户名。
修正后核心代码
// 替换原有的Matcher初始化和循环逻辑即可 Matcher m = Pattern.compile("user1=([^\"]+)\"").matcher(s); while(m.find()) { log(m.group(1)); }
可选优化建议
如果后续需要长期维护这个爬虫,更推荐用Jsoup这类HTML解析库直接定位DOM节点提取内容,比正则匹配的兼容性更高,不会因为页面结构微小变化就失效。
内容的提问来源于stack exchange,提问作者danieildefos
相关产品推荐
相关产品推荐

