如何在面对歧义时指定正则表达式的哪个部分优先?

时间:2012-02-22 11:00:19

标签: regex disambiguation

我有一个带有两个命名部分和一个可选连字符分隔符的正则表达式。

^(?<Left>xxx)-?(?<Right>yyy)$
(我已经简化了实际的正则表达式。而不是'xxx'和'yyy',想象两个非常长而复杂的正则表达式。)

但是,因为连字符是可选的,所以有输入字符串可以将隐含的分隔符添加到不同的位置。有没有办法可以通过说左或右应该占用输入字符串的较大份额来解决歧义?

例如,对于输入“ABCDEF”,可以将其分成“ABC”/“DEF”或“ABCDE”/“F”,两者都是两个子正则表达式的有效匹配。假设我更喜欢第二次拆分,因为我希望'Left'能够获得最大的块,只要'Right'留下有效的剩余部分。

我正在使用.NET的正则表达式库,但我希望有一种标准技术。

1 个答案:

答案 0 :(得分:1)

正则表达式中没有歧义,它会在您设计时匹配。

您可以更改每个正则表达式中量词的匹配行为以更改结果。

默认情况下,他们都很贪心。您可以尽可能地改变这种匹配行为,通过在量词之后添加问号来尽可能地匹配,例如.+?

\(.*\)将匹配

(a)b(c)
^^^^^^^

\(.*?\)匹配

(a)b(c)
^^^