2012-02-22 25 views
1

我有一个正则表达式有两个命名部分和一个可选的连字符分隔符。如何指定正则表达式的哪个部分在遇到歧义时需要优先权?

^(?<Left>xxx)-?(?<Right>yyy)$
(我已经简化了实际的正则表达式下来,而是“XXX”和“YYY”的,假设有两个很长的和复杂的正则表达式。)

但是,因为连字符是可选的,也有输入字符串,其中隐含的分隔符可以被添加到不同的地方。有没有办法通过说左或右应该占用输入字符串的更大份额来解决模糊性?

例如,对于可以拆分为“ABC”/“DEF”或“ABCDE”/“F”且两个子正则表达式均为有效匹配的输入“ABCDEF”。假设我更喜欢第二次拆分,因为只要'Right'剩下一个有效余数,我想'Left'取最大块。

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

+0

也许你可以使用'?',使图案非贪婪的一个,像'\ d *?'匹配尽可能少的次数。 – hochl 2012-02-22 11:06:11

回答

1

正则表达式中没有歧义,它会按照您设计的匹配。

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

默认情况下它们都是贪婪的。您可以尽可能地改变这种匹配行为,通过在量词后加一个问号来尽可能减少匹配,例如, .+?

\(.*\)将匹配

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

\(.*?\)将匹配

(a)b(c) 
^^^