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

m4wayne 发布于 2014/08/05 11:47
阅读 422
收藏 0

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

我使用的零宽断言正则:(?<=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];
    }

加载中
0
m
m4wayne

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

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

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

0
m
m4wayne

问题解决了,

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

返回顶部
顶部