Я должен извлечь слово в Perl, используя регулярное выражение - PullRequest
1 голос
/ 04 августа 2010

Слово начинается с -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 ]

2 голосов
/ 04 августа 2010

Если вам действительно нужно Регулярное выражение для решения проблемы, попробуйте это

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

Обновлено:

$word =~ m/-[dD]\s*\$\{(.*?)_NAME/; #assuming -d or -D always be there.
1 голос
/ 04 августа 2010

Я не уверен, что правильно понял вопрос.Но похоже, что код ниже решает вашу проблему:

$ 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
$
1 голос
/ 04 августа 2010

Иногда регулярные выражения не так надежны, как другие.

В этом случае я бы не отказался Text::Balanced попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...