私はテキストの束を持っていて、パターンのグループと一致させようとしています。私が使用している正規表現はパターンと一致することができます。最初のグループ。複数の複数行のグループに一致するPerlの正規表現
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.............................
どうあるべきかです。*へ。*?すべてのインスタンスのために、今、私は最初のグループを2番目のグループではありません。なぜ私は両方のグループを得ることができないのか分かりません。 – Sumedh
3箇所すべてを変更してもよろしいですか?あなたの '$ 2'と' $ 3'は両方のグループで同じように見えるので、 '。*'をそのまま1つの場所に残すと、最初のグループだけが一致しているように見えます。実際には、正規表現は本当に両方のグループ一緒に。 – ruakh
ruakh、あなたは人間の中の神です。ありがとうございました、私はいくつかのばかげたミスをしていたが、何が分からないのか分かっていました。 – Sumedh