Perl正则如何实现仅匹配指定字符、不含其他额外字符的字符串?
Perl正则匹配问题解答
匹配逻辑修正
你当前使用的正则m/[ACTG]{1,}/的作用是匹配字符串任意位置存在至少一个A/C/T/G字符,只要满足该条件就会匹配成功,因此包含非指定字符H的ACH也能通过校验,不符合需求。
你需要通过字符串锚点限定匹配范围为整个字符串,修正后的判断代码如下:
if ($string !~ m/^[ACTG]+$/) { die "invalid sequence"; }
规则说明:
^匹配字符串的起始位置[ACTG]+匹配1个及以上的A/C/T/G字符(+与你原写法中的{1,}作用完全等价)$匹配字符串的结束位置
修正后仅当整个字符串从头到尾全部由A/C/T/G构成时才会匹配成功,只要包含任意其他字符就会匹配失败,触发报错。
术语解答
写在正则定界符(你示例中使用的//是Perl正则最常用的定界符)之间的内容,中文专业名称是正则模式,也可称为匹配模式。
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

