模式匹配连续字符

时间:2013-08-20 03:24:11

标签: perl

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

我试过了:

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

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

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分: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个相同的字符。

答案 1 :(得分:3)

写作

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

您正在针对此正则表达式隐式测试$_。但是,$_未初始化,因此您收到错误。

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

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

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