PCRE:匹配子模式的返回偏移数

时间:2016-10-06 00:20:00

标签: regex pcre

我希望将大量模式分组,以便与网络文档中的各种HTML元素,属性和文本进行匹配。

例如,我可能对<title>元素的内容感兴趣,并且有这样的正则表达式:

pcre *test_filter = pcre_compile("(google|stackoverflow|expertsexchange)",0,&error,&erroffset,NULL);

如果我要测试&#34; stackoverflow&#34;的输入字符串,我想知道它是否可能以某种方式引用该组内的偏移量,即在这种情况下为1, 0表示谷歌,2表示experstexchange。

理想情况下,我要连接一堆文本字符串,这似乎是了解该组中哪个成员匹配的最明显的方法,而不是执行进一步的正则表达式。

pcre是否存在此类功能?

1 个答案:

答案 0 :(得分:2)

您提供的RE模式有助于找到匹配的字符串的,但您必须(至少)查找匹配的值以获取索引群组。如果更改模式以使每个单词都在其自己的捕获组中,则可以使用pcre_exec()的返回值来获取最后一个捕获组的索引(加1)。

如果模式为"(google)|(stackoverflow)|(expertsexchange)",那么如果匹配googlepcre_exec()将返回1(或2 stackoverflow&amp; C)。

在准备正则表达式时,我建议按反向排序顺序从字符串列表构建它;这会在较短(包含)的匹配之前放置较长的匹配,即使您使用更复杂的东西,它通常也是一个好的开始。