page.getHtml().regex()正则问题

发布于 2021-11-24 21:07:54 字数 1166 浏览 879 评论 2

@黄亿华 你好,想跟你请教个问题:

我使用的零宽断言正则:(?<=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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

惜醉颜 2021-11-28 17:14:23

问题解决了,

page.getHtml().regex()方法还有一个重载方法,传递groupId就可以了。点赞

坚持沉默 2021-11-25 04:04:31

对于“零宽断言”webmagic selector是不是需要去处理下?

当然我用其它正则能完成匹配。

期待黄大回复,我想说webmagic设计的太牛了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文