我正在寻找一个Perl正则表达式,它将验证仅包含字母ACGT的字符串。例如,“ AACGGGTTA”应该有效,而“ AAYYGGTTA”应该无效,因为第二个字符串的“ YY”不是A,C,G,T字母之一。我有以下代码,但它同时验证了上述两个字符串
if($userinput =~/[A|C|G|T]/i)
{
$validEntry = 1;
print "Valid\n";
}
Run Code Online (Sandbox Code Playgroud)
谢谢
使用字符类,并确保使用字符串标记的开头和字符串标记的\A结尾检查整个字符串\z。
您还应该使用*或+表示要匹配的字符数- *表示“零或多个”,+表示“一个或多个”。
因此,下面的正则表达式说:“(不区分大小写的)字符串的开头和结尾之间,应仅包含以下一个或多个字符:a,c,g,t”
if($userinput =~ /\A[acgt]+\z/i)
{
$validEntry = 1;
print "Valid\n";
}
Run Code Online (Sandbox Code Playgroud)
使用字符计数tr运算符:
if( $userinput !~ tr/ACGT//c )
{
$validEntry = 1;
print "Valid\n";
}
Run Code Online (Sandbox Code Playgroud)
tr/characterset//计算字符集中字符串中有多少个字符;带有/c标志,它计算字符集中没有多少个字符集。使用!~而不是=~否定结果,因此,如果在字符集中没有字符,则为true;在字符集中没有字符为false。