1

我正在尝试搜索字符串以匹配多个捕获组。在两个这样的捕获组的情况下,数据是可选的,因此它们可能匹配也可能不匹配。我正在使用带有选项 -onumber 的 pcregrep 来返回各种捕获组。问题是:在没有值匹配的情况下如何返回默认值。我尝试使用析取但没有成功。

例子:

../pcre-8.32/pcregrep  -Min -o1 -o2 --om-separator="; " '(?s)<!-- BOUNDARY -->(?!.*?Read the full review).*?((\d*) of (\d*) people found the following review helpful|.*?).*?Help other customers find the most helpful' shirts/B000W18VGW

产生正确的行号。

-Min -o1 -o2 --om-separator="; " '(?s)<!-- BOUNDARY -->(?!.*?Read the full review).*?(\d*) of (\d*) people found the following review helpful.*?Help other customers find the most helpful' shirts/B000W18VGW

产生正确的输出,但仅适用于具有

(\d*) of (\d*) people found the following review helpful

如果上面的行不存在,我想为每个捕获组返回“0”。

这可能吗?如果可以,怎么办?

4

1 回答 1

1

你不能让一个角色神奇地出现。也就是说,如果0您的主题字符串中没有任何内容,则无法捕获0. 因此,如果要捕获 a 0,则必须将 a0插入主题中。

现在,假设出于某种疯狂的原因,您能够并且愿意修改您的主题字符串(尽管显然您不能或不愿意0在正则表达式之外设置大小写,在代码中)。然后,这是一个解决方案。

附加0 of 0 people found the following review helpful在主题字符串的最后,而不是这样:

((\d*) of (\d*) people found the following review helpful|.*?)

做这个:

(?=.*?(\d*) of (\d*) people found the following review helpful)

换句话说,通过附加0 of 0 people [...]您保证该句子将存在于某处,因此通过在零宽度前瞻断言中捕获数字,您可以在主题字符串中的任何位置查找该句子,然后再继续您的其余部分正则表达式。

于 2013-02-07T17:24:32.473 回答