我想知道是否有一种更简单的词匹配方式,至少有一个是强制性的。
为了简化事情,想象我的单词是A,B和C.我希望匹配A,B,C,AB,BC,AC但是对于CA,它将C和A作为分开的匹配,订单很重要。因此我提出了第一个想法:
A?B?C?
我发现的唯一问题是它也匹配空字符串,我得到了无效的匹配。我想要的是一些更简单的做法:
(AB?C?|A?BC?|A?B?C)
在ABCASDBC匹配:ABC,A,BC。 我真正的问题可以有更多的单词,表达式可以增长并且计算成本昂贵。这是我最关心的问题(不使用正则表达式的另一种解决方案也是受欢迎的)
答案 0 :(得分:3)
(?=[xyz])x?y?z?
或者如果x,y,z不是字符:
(?=x|y|z)(?:x)?(?:y)?(?:z)?
这个想法是首先使用正向前瞻来匹配三者中任何一个的存在,然后是订单本身的序列。