至少包含一组中不同字符的计数

时间:2014-09-19 18:24:55

标签: sql regex postgresql

假设我有这样的字符集:

['a','b','c','x','y','z']

我想构建一个匹配特定数量的这些字符的正则表达式(例如3)。

以下是一些例子:

  • ab - 不匹配
  • xy - 不匹配
  • abt - 不匹配
  • aaa - 不匹配
  • abc - 匹配
  • yaz - 匹配
  • yazx - 匹配
  • ytaz - 匹配

这可以用正则表达式完成吗?

1 个答案:

答案 0 :(得分:3)

一个简单的解决方案是这样的模式:

(.*[abcxyz]){3}

这将匹配任何字符的零个或多个,后跟abcxy或{{ 1}},所有这些必须在主题字符串中至少出现3次。

要仅匹配包含不同字母的字符串,您可以使用否定前瞻(z)和反向引用((?!…)):

\N

这将匹配任何字符的零个或多个,后跟(.*([abcxyz])(?!.*\2)){3} abcx或{{ 1}},只要该字符的另一个实例稍后不出现在字符串中(即它将匹配字符串中该字符的最后一个实例),所有这些实例必须在主题字符串中至少出现3次。 / p>

当然,您可以将y更改为您喜欢的任何内容,但请注意,如果您需要指定最大次,这些字符可以出现在您的字符串中,则无效,只有最低限度。