假设我有这样的字符集:
['a','b','c','x','y','z']
我想构建一个匹配特定数量的这些字符的正则表达式(例如3)。
以下是一些例子:
ab
- 不匹配xy
- 不匹配abt
- 不匹配aaa
- 不匹配abc
- 匹配yaz
- 匹配yazx
- 匹配ytaz
- 匹配这可以用正则表达式完成吗?
答案 0 :(得分:3)
一个简单的解决方案是这样的模式:
(.*[abcxyz]){3}
这将匹配任何字符的零个或多个,后跟a
,b
,c
,x
,y
或{{ 1}},所有这些必须在主题字符串中至少出现3次。
要仅匹配包含不同字母的字符串,您可以使用否定前瞻(z
)和反向引用((?!…)
):
\N
这将匹配任何字符的零个或多个,后跟(.*([abcxyz])(?!.*\2)){3}
,a
,b
,c
,x
或{{ 1}},只要该字符的另一个实例稍后不出现在字符串中(即它将匹配字符串中该字符的最后一个实例),所有这些实例必须在主题字符串中至少出现3次。 / p>
当然,您可以将y
更改为您喜欢的任何内容,但请注意,如果您需要指定最大次,这些字符可以出现在您的字符串中,则无效,只有最低限度。