如何在组中定义可选字符?
我正在尝试匹配以下内容......
kg
kilo
kilos
kilogram
kilograms
g
gram
grams
我知道我可以将它们单独放在一个小组中,但我想知道我是否可以做这样的事情......
(kg|kilo?g?ram?s?)
问题是它只能与s匹配吗?或者没有第二次交替,所以它将匹配零长度。
答案 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
,别无其他。