У меня есть куча текста, и я пытаюсь сопоставить группу шаблонов, регулярное выражение, которое я использую, может соответствовать шаблону, но проблема в том, что он соответствует только второй группе, а не первой группе.
open(FILE, "match.txt") || die("Could not open file ");
my $text = do { local $/; <FILE> };
while( $text =~ m/FibreChannel SCSI Interface.*World Wide Port Number\.*(.*?)\n.*Driver\.+(.*?)\n.*Vendor Name\.+(.*?)\n/sgmp )
{
print "$1\n$2\n$3\n";
}
Печать
0x1b201
lpfc_740
Испытательная корпорация
Приведенный выше код работает, но он отображает только текст из второй группы, а не из первой группы. Что мне здесь не хватает? Есть ли лучший способ сделать это?
Я думал, что это напечатает
0x1a101
lpfc_740
Испытательная корпорация
0x1b201
lpfc_740
Испытательная корпорация
------------------------ match.txt содержит
\==+FibreChannel SCSI Interface :
|----Link State.........................................Down
|----World Wide Port Number.............................0x1a101
\==+SCSI Interface :
|----Driver..........................................lpfc_740
|----Queue Depth.....................................2038
\==+PCI Device :
|----Bus..........................................0x06
|----Vendor Name..................................Test Corporation
|----Slot Description.............................
\==+FibreChannel SCSI Interface :
|----Link State.........................................Down
|----World Wide Port Number.............................0x1b201
\==+SCSI Interface :
|----Driver..........................................lpfc_740
|----Queue Depth.....................................2038
\==+PCI Device :
|----Bus..........................................0x0a
|----Vendor Name..................................Test Corporation
|----Slot Description.............................