连接正则表达式s + w + ... perl

时间:2012-05-09 09:19:02

标签: regex perl

我有这样的条目:

    XYZABC------------HGTEZCW
    ZERTAE------------RCBCVQE

我想得到HGTEZCW和RCBCVQE。 我想使用通用正则表达式。

$temp=~ s/^\s+//g;     (1)
$temp=~ s/^\w+[-]+//g; (2)

如果我使用(1)+(2),它可以工作。 它有效:HGTEZCW,然后是RCBCVQE ...

我想知道是否可以在一行中执行此操作,如:

$temp=~ s/^\s+\w+[-]+//g; (3)

当我使用(3)时,我得到了这个结果:XYZABC------------HGTEZCW

我不明白为什么不可能在一行中连接1 + 2。

抱歉,我的参赛作品是:

    XYZABC------------HGTEZCW
    ZERTAE------------RCBCVQE

此外,正则表达式1删除空格,但当我使用regex2时,它删除XYZABC ------------。 但组合(3),不起作用。  我有XYZABC------------HGTEZCW

@Tim所以每个字符串的开头总是有空格? 是

3 个答案:

答案 0 :(得分:1)

你的正则表达式(1)从字符串的开头删除空格。所以它对你的示例字符串没有任何作用。

Reges(2)从字符串的开头删除所有字母数字加上任何后续破折号,返回最后一个短划线后面的内容。

如果两者结合使用,则正则表达式失败,因为没有空格\s+可以匹配 - 因此整个正则表达式失败。

要解决此问题,只需将空格设为可选。您也不需要将-括在括号中:

$temp=~ s/^\s*\w+-+//g;

答案 1 :(得分:0)

这应该可以解决问题。

$Str = '
    XYZABC------------HGTEZCW
    ZERTAE------------RCBCVQE
';

@Matches = ($Str =~ m#^.+-(\w+)$#mg);

print join "\n",@Matches ;

答案 2 :(得分:0)

如果您只需要每个条目的最后七个字符,则可以执行以下操作:

$temp =~ /.{7}$/;