为什么 '?' Perl的正则表达式中的运算符在这里不起作用?

时间:2013-09-17 01:19:50

标签: regex perl

给出以下输入:

micro RNA 155
micro-RNA-155

我想对它们进行规范化,使它们都返回:

miR-155

但为什么这个正则表达式不起作用

 #!/usr/bin/perl
  my $mirn = $ARGV[0];
  $mirn =~ s/micro-?RNA-?(\d+)/miR-$1/gi;

  print "$mirn\n";

3 个答案:

答案 0 :(得分:4)

你没有考虑这些空间。

s/micro[\- ]RNA[\- ](\d)/miR-$1/gi;

s/micro[\- ]RNA[\- ](?=\d)/miR-/gi;

答案 1 :(得分:4)

尝试:

s/micro[- ]RNA[- ](\d+)/miR-$1/gi;

这表示单词可以用连字符或空格分隔。你的正则表达式说它们可以用连字符分隔,或者必须是连续的。

答案 2 :(得分:1)

请试试这个..

空间可能来临之前&连字符后..

s/micro\s*-?\s*Rna\s*-?\s*(\d+)/miR-$1/igs