仅当字符串包含指定的内容但没有其他内容时才匹配正则表达式
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///。
我正在尝试在 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///。