page.getHtml().regex()正则问题
@黄亿华 你好,想跟你请教个问题:
我使用的零宽断言正则:(?<=xxx:").*?js,如匹配:xxx:"https://abc.com/a.js"
在RegexSelector 31处,对regexStr进行处理:
if (StringUtils.countMatches(regexStr, "(") - StringUtils.countMatches(regexStr, "\(") ==
StringUtils.countMatches(regexStr, "(?:") - StringUtils.countMatches(regexStr, "\(?:")) {
33号 regexStr = "(" + regexStr + ")";
因为代码判断中没有对“(?<=”进行判断,所以(?<=xxx:").*?js没有添加分组(我正则小白,33行加()应该是添加分组吧?:)),而RegexSelector->group的值始终是1(private int group = 1;),所以我的正则运行时就会出现数据越界。
错误出现在:RegexResult->get 28行。
public String get(int groupId) {
if (groups == null) {
return null;
}
28行 return groups[groupId];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题解决了,
page.getHtml().regex()方法还有一个重载方法,传递groupId就可以了。点赞
对于“零宽断言”webmagic selector是不是需要去处理下?
当然我用其它正则能完成匹配。
期待黄大回复,我想说webmagic设计的太牛了