PCRE: Return 匹配子模式的偏移量
PCRE: Return offset number of matching subpattern
我希望对大量模式进行分组,以匹配 Web 文档中的各种 HTML 元素、属性和文本。
例如,我可能对 <title>
元素的内容感兴趣并且有这样的正则表达式:
pcre *test_filter = pcre_compile("(google|Whosebug|expertsexchange)",0,&error,&erroffset,NULL);
如果我要针对 "Whosebug" 的输入字符串进行测试,我想知道是否有可能以某种方式引用该组内的偏移量,即在本例中为 1,google 为 0和 2 个用于 experstexchange。
理想情况下,我将连接一堆文本字符串,这似乎是了解组中哪个成员匹配的最明显方法,而不是执行进一步的正则表达式。
pcre
是否存在这样的功能?
您提供的 RE 模式有助于找到匹配字符串的 value,但您必须(至少)按顺序查找匹配值获取该组的索引。如果您将模式更改为让每个单词都在其自己的捕获组中,那么您可以使用 pcre_exec()
中的 return 值来获取最后一个捕获组的索引(加 1)。
如果模式是 "(google)|(Whosebug)|(expertsexchange)"
,那么如果 google
匹配,pcre_exec()
将 return 1
(或 2
Whosebug
&c).
在准备正则表达式时,我建议从倒序的字符串列表中构建它;这会将较长的匹配放在较短的(包含的)匹配之前,即使您使用更复杂的东西,它通常也是一个很好的起点。
我希望对大量模式进行分组,以匹配 Web 文档中的各种 HTML 元素、属性和文本。
例如,我可能对 <title>
元素的内容感兴趣并且有这样的正则表达式:
pcre *test_filter = pcre_compile("(google|Whosebug|expertsexchange)",0,&error,&erroffset,NULL);
如果我要针对 "Whosebug" 的输入字符串进行测试,我想知道是否有可能以某种方式引用该组内的偏移量,即在本例中为 1,google 为 0和 2 个用于 experstexchange。
理想情况下,我将连接一堆文本字符串,这似乎是了解组中哪个成员匹配的最明显方法,而不是执行进一步的正则表达式。
pcre
是否存在这样的功能?
您提供的 RE 模式有助于找到匹配字符串的 value,但您必须(至少)按顺序查找匹配值获取该组的索引。如果您将模式更改为让每个单词都在其自己的捕获组中,那么您可以使用 pcre_exec()
中的 return 值来获取最后一个捕获组的索引(加 1)。
如果模式是 "(google)|(Whosebug)|(expertsexchange)"
,那么如果 google
匹配,pcre_exec()
将 return 1
(或 2
Whosebug
&c).
在准备正则表达式时,我建议从倒序的字符串列表中构建它;这会将较长的匹配放在较短的(包含的)匹配之前,即使您使用更复杂的东西,它通常也是一个很好的起点。