如何通过perl和regex验证字符串仅包含某些字母

use*_*663 2 regex perl

我正在寻找一个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)

谢谢

Lon*_*erd 5

使用字符类,并确保使用字符串标记的开头和字符串标记的\A结尾检查整个字符串\z

您还应该使用*+表示要匹配的字符数- *表示“零或多个”,+表示“一个或多个”。

因此,下面的正则表达式说:“(不区分大小写的)字符串的开头和结尾之间,应仅包含以下一个或多个字符:a,c,g,t”

if($userinput =~ /\A[acgt]+\z/i)
{
    $validEntry = 1;
    print "Valid\n";
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为“验证仅包含字母ACGT的字符串”非常清楚 (2认同)

yst*_*sth 5

使用字符计数tr运算符:

if( $userinput !~ tr/ACGT//c )
{
    $validEntry = 1;
    print "Valid\n";
}
Run Code Online (Sandbox Code Playgroud)

tr/characterset//计算字符集中字符串中有多少个字符;带有/c标志,它计算字符集中没有多少个字符集。使用!~而不是=~否定结果,因此,如果在字符集中没有字符,则为true;在字符集中没有字符为false。