gpt4 book ai didi

c - PCRE 获取匹配位置而不获取所有匹配项

转载 作者:行者123 更新时间:2023-11-30 17:33:46 27 4
gpt4 key购买 nike

我正在使用 pcre_exec 来应用我从文件中读取的一些正则表达式。由于正则表达式可能包含重复计数,例如 [a-z]{1000},因此我必须传递 3*1001 整数的匹配 vector 才能获得第一个元素,它告诉我匹配从哪里开始/结束。

我只需要开始/结束位置,不需要所有比赛(组)位置。并且 pcre_exec 返回 0,根据手册,这意味着“您需要更大的匹配 vector ”。

我的问题是,如何在不传递任意大的匹配 vector 的情况下获得开始/结束。或者至少,我如何知道需要传递多大的 vector 。

最佳答案

0 表示匹配成功,但 ovector 太小。只有大约 2/3 的条目将填充真实值。唯一的异常(exception)是前两个值,如果 ovector 大小 >= 2,这两个值将被填充。因此只需传递一个 'int ovector[2]' 即可获取开始和结束。

两个注意事项:

a) 如果你传递一个小的ovector,PCRE会分配一个,这个大小就足够了。请参阅此评论:

/* 如果表达式获得的反向引用数量多于所提供的偏移量所能容纳的数量,我们将获得一个临时工作存储 block 以在匹配期间使用。否则,我们可以使用提供的 vector ,将其大小舍入为 3 的倍数。 */

您无法通过这种方式减少软件的内存消耗。

b) 这不会引入任何捕获括号:[a-z]{1000},因此您不需要传递具有 3*1001 值的数组。即使 ([a-z]{1000}) 或 ([a-z]){1000} 也仅添加一个捕获括号。

关于c - PCRE 获取匹配位置而不获取所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com