单词以-D
开头(也可能是-d
)。
其次是零个或多个空格。
之后是$
。
然后系列是{rajna_NAME}
。
简短
-d ${ranjana_wdgf_NAME}or -D${Tom_task_NAME}
我想提取
ranjana_wdgf
Tom_task
我怀疑是
if ( $word =~ m/^-D(\$)\|(\w*NAME)\b/)
怎么了?
答案 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 $