仅当字符串包含指定的内容但没有其他内容时才匹配正则表达式

Regex match only if string contains what is specified but nothing else

我正在尝试在 perl 中实现一个正则表达式,如果字符串包含我指定的任何内容,它就会匹配,但如果字符串包含任何其他内容,即使它另外包含我的正则表达式元素,它也必须失败。 例如:

if ($string !~ m/[ACTG]{1,}/) {
  die "invalid sequence";
}

如果我输入 DQJ 作为 s 序列,程序就会死掉。但是,如果我输入 ACH 它不会,因为它至少包含正则表达式模式中的一个元素。

如果字符串包含 A、C、T 或 G 以外的任何内容,我希望匹配失败。

PS: 我不熟悉这种情况下的命名法,在正则表达式语句中,// 里面的内容我怎么称呼?

使用^字符定义字符串的开头 和 $ 定义结尾。

if ($string !~ /^[ACTG]*$/){die "invalid sequence";}

您可以确保每个字符都是有效字符。

die if !/^[ACTG]*\z/;

使用更快的 tr///:

die if tr/ACTG// != length($_);

或者您可以确保字符串不包含无效字符。

die if /[^ACTG]/;

使用更快的 tr///:

die if tr/ACTG//c;

感谢@DavidO 建议 tr///。