Sql 集合中至少包含不同字符的计数

Sql 集合中至少包含不同字符的计数,sql,regex,postgresql,Sql,Regex,Postgresql,假设我有这样一个字符集: ['a','b','c','x','y','z'] (.*[abcxyz]){3} 我想构建一个正则表达式,它匹配一定数量的字符(例如3) 以下是一些例子: ab-不匹配 xy-不匹配 abt-不匹配 aaa-不匹配 abc-匹配 yaz-匹配 yazx-匹配 ytaz-匹配 这可以通过正则表达式实现吗?简单的解决方案是这样一种模式: ['a','b','c','x','y','z'] (.*[abcxyz]){3} 这将匹配任何字符中的零个或多个,后跟a、

假设我有这样一个字符集:

['a','b','c','x','y','z']
(.*[abcxyz]){3}
我想构建一个正则表达式,它匹配一定数量的字符(例如3)

以下是一些例子:

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

这可以通过正则表达式实现吗?

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

['a','b','c','x','y','z']
(.*[abcxyz]){3}
这将匹配任何字符中的零个或多个,后跟
a
b
c
x
y
z
,所有这些字符必须在主题字符串中至少出现3次

若要仅匹配包含不同字母的字符串,可以使用负数先行(
(?!…)
)和反向引用(
\N
):

这将匹配任何字符中的零个或多个,后跟
a
b
c
x
y
z
中的一个,只要该字符的另一个实例不出现在字符串的后面(即,它将匹配字符串中该字符的最后一个实例),所有这些内容必须在主题字符串中至少出现3次


当然,您可以将
{3}
更改为您喜欢的任何字符,但请注意,如果您需要指定这些字符在字符串中出现的最大次数,则这将不起作用,而只能指定最小次数。

'abt-mismatch'将匹配您的正则表达式。@user17130
abt
将不匹配,但是由于
不匹配
中的
a
c
,整个字符串
abt-mismatch
将不匹配。OP没有指定这三个字符是否需要出现在同一个单词中。这也将匹配aaa。我的意思是,当我说至少是3个不同的字符时。aaa只包含一个。如果该数字增加,
(.*([abcxyz])(?!.*\2)){5}?
@sln是的,它非常灵活。如果您需要匹配特定的“短语”,例如,
(.*(foo | bar | baz | qux)(?!.*\2)){3}
将匹配包含三个或更多这些“短语”的字符串。那么您将整天匹配
aaaa