我必须使用正则表达式在Perl中提取一个单词

时间:2010-08-04 09:15:48

标签: regex perl

单词以-D开头(也可能是-d)。 其次是零个或多个空格。 之后是$。 然后系列是{rajna_NAME}。 简短

-d ${ranjana_wdgf_NAME}or -D${Tom_task_NAME}

我想提取

ranjana_wdgf
Tom_task

我怀疑是

if ( $word =~ m/^-D(\$)\|(\w*NAME)\b/)

怎么了?

3 个答案:

答案 0 :(得分:2)

如果您确实需要正则表达式来解决问题, 然后尝试这个

$word =~ m/\{(.*?)\_NAME/; # assuming that name is surrounded by curly brackets

<强>更新

$word =~ m/-[dD]\s*\$\{(.*?)_NAME/; #assuming -d or -D always be there.

答案 1 :(得分:1)

有时候正则表达式并不像其他方式那样强大。

对于这种情况,我不介意尝试Text::Balanced

答案 2 :(得分:1)

我不确定我是否正确理解了这个问题。 但看起来下面的代码可以解决您的问题:

$ cat extract.pl 
#!/usr/bin/perl

use strict;
use warnings;

sub extract_name($)
{
  my $s = shift;
  if($s =~ /^-[dD]\s*\${(.*)_NAME}$/)
    {
      print "$1\n";
    } 
  return;
}

extract_name('-d ${ranjana_wdgf_NAME}');
extract_name('-D${Tom_task_NAME}');
$ perl extract.pl 
ranjana_wdgf
Tom_task
$