Почему этот кусок кода не работает в Perl ... Это просто - PullRequest
0 голосов
/ 03 августа 2010
#!usr/bin/perl
$file_name = "file.txt";
open(FILE,$file_name);
while(<FILE>)
{
my $line = $_;
if($line =~ m/Svr\b/)
{
my $server_name;
$server_name  = $1;
print $server_name;
}
}

file.txt:

 ewrerfSvr//To be extracted
 Rate=rpm
 ID=123
 RATE=45
 ADDR=retriveBal
 Grocer="-r -e ${MAIN_ROOT}/logs/stderr -o ${MAIN_ROOT}/logs/stdout -A --"
freedonSvr
 BALFSvr   //to be extracted
 Rate=rpm1
 ID=12323
 RATE=45etf
 ADDR=retriveBal
 Grocer="-r -e ${MAIN_ROOT}/logs/stderr -o ${MAIN_ROOT}/logs/stdout -A --"
freedonSvr -D ${REV_AccountBalance_NAME}"//

Также хочу извлечь:

 REV_AccountBalance

Дайте мне предложение сделать это с помощью регулярного выражения.

Ответы [ 2 ]

4 голосов
/ 03 августа 2010
#!usr/bin/perl
use strict;
use warnings;

my $file_name = "file.txt";
open(my $fh,$file_name) or die "Could not open file";

while(<$fh>) {
    if (m/(\w*Svr)\b/) { print "$1\n"; }
}

Вы должны привыкнуть к использованию warnings и strict и отлову ошибок при вызовах типа open.

И, в частности, при ответе на ваш вопрос вам необходимо использовать скобкирегулярное выражение для извлечения в $N переменных.

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

$1 даст вам часть совпавшей строки в скобках, но у вас их нет. Вы имели в виду, что ваше регулярное выражение было m/Svr\b(.+)/? Пожалуйста, покажите результат, который вы хотите получить; комментарии в file.txt не достаточно явные.

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