我正在寻找与以下内容匹配的正则表达式: 字符“ a”的2倍和字符“ b”的3倍。 另外,字符不必紧随其后,这意味着不仅应该允许使用“ aabbb”和“ bbaaa”,而且还可以使用“ ababb”,“ abbab”等。
从它的声音来看,这应该是一件容易的事,但是atm我无法将头缠在它上面。重定向到一个好的阅读版本是值得赞赏的。
答案 0 :(得分:-1)
您需要使用正向前行。这与here中描述的密码验证问题相同。
编辑:
积极的表情符号将使您能够根据字符串检查模式,而无需更改正则表达式下一部分的匹配位置。这意味着您可以在字符串的当前位置测试多个正则表达式模式,并且要使正则表达式匹配所有正向先行都必须匹配。
在您的情况下,您要查找2 a'和3 b,因此正则表达式与字符串中任意位置的2 a精确匹配是update tablename t1
set A = (select count(*) from tablename t2 where t2.B = t1.B having count(*)=2)
,而3 b是/^[^a]*a[^a]*a[^a]*$/
,我们现在需要将它们组合这样我们就可以按照/^[^b]*b[^b]*b[^b]*b[^b]*$/
进行匹配。这将从带有/^(?=[^a]*a[^a]*a[^a]*$)(?=[^b]*b[^b]*b[^b]*b[^b]*$).*$/
锚点的字符串的开头开始,然后正好寻找2 a,然后是字符串的结尾。然后,因为这是一个正向的前瞻,^
在字符串中匹配模式的下一部分的位置将不会移动,因此我们仍位于字符串的开头,现在恰好匹配3 b。由于这是一个积极的前瞻,我们仍位于字符串的开头,但现在知道字符串中有2 a和3'b,因此我们将整个字符串与(?= ... )
匹配。