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