有没有人知道如何在mysql中使用regexp匹配偶数和奇数的字母?我需要匹配偶数个A,然后是奇数个G,然后至少一个TC?例如:acgtccAAAAGGGTCatg会匹配。它是dna测序的东西
答案 0 :(得分:23)
偶数个A可以表示为(AA)+
(AA
的一个或多个实例;因此它将匹配AA,AAAA,AAAAAA ......)。奇数个G可以表示为G(GG)*
(一个G
,后跟零个或多个GG
个实例,这样就可以匹配G,GGG,GGGGG ......)。 / p>
把它放在一起你就得到了:
/(AA)+G(GG)*TC/
但是,由于正则表达式引擎会尝试尽可能匹配,因此该表达式实际上会匹配AAAGGGTC
的子字符串(即AAGGGTC
)!为了防止这种情况发生,您可以使用negative lookbehind确保第一个A
之前的字符不是另一个A
:
/(?<!A)(AA)+G(GG)*TC/
...除了MySQL不支持其正则表达式中的外观。
您可以做的是指定模式从字符串的开头开始(anchored到^
),或者前面是不是A的字符:
/(^|[^A])(AA)+G(GG)*TC/
但请注意,如果在字符串的开头没有找到模式,则使用此模式将捕获额外的字符,因此如果第一个字符不是A,则必须将其剪切掉。
答案 1 :(得分:1)
您可以尝试类似(AA)*(GG)* GTC
的内容我认为这样可以解决问题。不知道是否有一个特殊的mysql语法