PCRE获得比赛位置而没有获得所有比赛

时间:2014-05-13 11:35:42

标签: c regex text pcre

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

我只需要开始/结束位置,而不是所有匹配(组)位置。并且pcre_exec返回0,根据手册的意思是“你需要一个更大的匹配向量”。

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

1 个答案:

答案 0 :(得分:0)

0表示你有一个成功的匹配,但是ovector太小了。只有大约2/3的条目将填充实际值。唯一的例外是前两个值,如果ovector大小为> = 2,将填充这些值。因此,只需传递一个' int ovector [2]'得到开始和结束。

两个注释:

a)如果你通过一个小的ovector,PCRE将分配一个,这个尺寸足够了。看到这个评论:

/ *如果表达式的后向引用多于提供的偏移量,我们会在匹配期间获得临时的工作存储块。否则,我们可以使用提供的向量,将其大小四舍五入为3. * /

的倍数

您不能以这种方式减少软件的内存消耗。

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