RegEx组中的多个可选字符

时间:2015-06-20 09:51:07

标签: regex

如何在组中定义可选字符?

我正在尝试匹配以下内容......

kg
kilo
kilos
kilogram
kilograms
g
gram
grams

我知道我可以将它们单独放在一个小组中,但我想知道我是否可以做这样的事情......

(kg|kilo?g?ram?s?)

问题是它只能与s匹配吗?或者没有第二次交替,所以它将匹配零长度。

2 个答案:

答案 0 :(得分:4)

我首先要列举所有可能的匹配条件,然后从那里开始削减,看看是否有更有效的解决方案:

kg|kilo|kilos|kilogram|kilograms|g|gram|grams

复数形式的'是一个明显的冗余:

kg|kilos?|kilograms?|g|grams?

g和kg可能会崩溃:

k?g|kilos?|kilograms?|grams?

我们可以将单位折成千克:

k?g|kilo(?:s|grams?)?|grams?

对于"克的六个字符重复你好吗?" :)

答案 1 :(得分:3)

您可以使用(?:)对项目进行分组而不进行捕获(这适用于大多数RegEx风格;如果您不确定,请在引擎的文档中查找“非捕获组”。)

有了这个,你可以尝试这样的事情:

(k?g|(?:kilo)?grams?|kilos?)

这完全符合

g kg gram grams kilogram kilograms kilo kilos

,别无其他。