2014-10-10 5 views
1

Я пытаюсь получить подстроки из файла. Но я могу получить только одну подстроку, но не могу получить вторую.Regex для извлечения атрибутов

Вот пример строки:

<testPoolResult name="Pool" loop="1" currency="false" randomized="false" startTime="01.01.70_02:10:059""01.01.70_02:11:000" duration="0"> 

<testCase name="Test" status="SUCCESS" iteration="1" startTime="01.01.70_02:10:059" endTime="01.01.70_02:10:059" duration="0"> 

<testAction name="pend" status="SUCCESS" iteration="1" startTime="01.01.70_02:10:059" endTime="01.01.70_02:10:059" duration="0"/> 

Мне нужно разобрать строку, которая оказывает testCase и извлечь название теста и состояния теста.

вот мой код:

use warnings; 
open(my $fh, "<", "test.txt") or die "can not open the file $! \n"; 
while (my $line = <$fh>) { 
    if ($line =~ /testCase\s+name[=""](.+?)\s+status[=""](.+?)/x) { 
     print $1. " " . $2 . "\n"; 
    } 
} 

Может ли один помочь мне?

+2

Если вы разбираете XML использовать парсер, такие как XML :: Twig https://metacpan.org/pod/XML::Twig – AKHolland

+0

его немного сырой way'if ($ линия = ~ /testCase\s+name\=\"(.*?)\"\s+status\=\"(.*?)\"/i) { print $ 1, $ 2; } ' – run

ответ

2

Заменить строку:

if($line =~ /testCase\s+name[=""](.+?)\s+status[=""](.+?)/x) 

с

if ($line =~ /testCase\s+name="(.+?)"\s+status="(.+?)"/x) 
0

Вы обработки файла XML? Используйте соответствующий парсер, например. xsh:

open test.xml ; 
for //testCase echo @name @status ; 
Смежные вопросы