代码之家  ›  专栏  ›  技术社区  ›  Dathan

支持延迟计算的.Net正则表达式库

  •  2
  • Dathan  · 技术社区  · 14 年前

    注意:我特别寻找惰性评价(即,库,而不是立即返回一个文档中的所有匹配项,只消耗尽可能多的文档,以确定每个请求的下一个匹配),不支持惰性量词-虽然如果它也支持惰性量词,我不会反对!

    具体细节:我希望能够对可能有成百上千个正则表达式匹配的非常大的文档运行正则表达式,并使用 IEnumerable<> 语义,而不必承担查找所有匹配项的前期成本。

    理想的自由/开源软件是C#,但唯一的要求是.NET3.5应用程序的可用性。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Ahmad Mageed    14 年前

    “比赛课” NextMatch method

    返回与结果的新匹配 下一场比赛,从 最后一场比赛结束的位置 (在最后一个字符之后)

    在Reflector中快速查看它可以确认这种行为:

    public Match NextMatch()
    {
        if (this._regex == null)
        {
            return this;
        }
        return this._regex.Run(false, base._length, base._text, this._textbeg,
            this._textend - this._textbeg, this._textpos);
    }
    

    查看链接的MSDN参考以获取其用法示例。简而言之,流程类似于:

    Match m = rx.Match(input);
    while (m.Success) 
    {
        // do work
        m = m.NextMatch();
    }
    
        2
  •  2
  •   Jon Skeet    14 年前

    你确定内置的 Regex 班级不这样做?例如 Match.NextMatch() 方法表明它是从它到达的地方继续的。。。

    相信 如果你打电话 Regex.Match 它将在第一场比赛时停止,然后在你打电话时从那里继续 NextMatch .