2

我有一个字符串列表,我想搜索并忽略任何包含连续出现超过 4 次的 A 或 G 字符的字符串。例如,我想忽略 TCAAAATC 或 GCTGGGGAA 等字符串。

我试过了:

unless ($string =~ m/A{4,}?/g || m/G{4,}?/g)
{
    Do something;
}

但是我收到一条错误消息“在模式匹配中使用未初始化的值 (m//)”。

任何建议,将不胜感激。

4

2 回答 2

3

您需要避免与 的隐式比较$_,您可以通过编写以下代码来做到这一点:

unless ($string =~ m/A{4}/ || $string =~ m/G{4}/)

这会在字符串中查找正好 4 个 A 或正好 4 个 G;如果有 4 个,则是否超过 4 个都没关系。

您可以使用以下方法将其简化为单个正则表达式:

unless ($string =~ m/([AG])\1{3}/)

它查找 A 或 G 后跟 3 个相同的字符。

于 2013-08-20T03:32:37.197 回答
3

通过写作

|| m/G{4,}?/g

您正在$_针对此正则表达式进行隐式测试。但是,$_没有初始化,所以你得到一个错误。

unless ($string =~ m/A{4}/ || $string =~ m/G{4}/)

相反(注意对正则表达式的简化),或者,作为单个表达式,

unless ($string =~ m/A{4}|G{4}/)
于 2013-08-20T03:33:09.010 回答