0

次のような行を持つファイルがあります。

<tag host="xyz|abc" some info />
<tag host="ijk,cdf" some info />

パターン マッチングを使用してホストの情報を取得しており、ホストの値を分割したいと考えています。何らかの理由で、次のコードは正しいように見えますが、コンマでは機能しないようです。

if($line =~ m/(\s\S)*host=\"(\S+)\"(\s\S)*/)
{
($val) = ($2);
$val=~tr/!$()//ds;
my @values;
if($val =~ m/((\S+)\|(\S+))*/ )
{
    @values=split('\|',$val);
}
else
{
@values=split(',',$val);
}
#Perform some action on Values.
}

誰でもこれで私を助けることができますか? 前もって感謝します。

4

2 に答える 2

2

いくつかのアイデア:

  • use strictuse warningsそしていくつかのインデントがいいでしょう:)

  • あなたが書いた場所は(\s\S)、JavaScript に精通しており、文字クラス [\s\S]を意味していると思いますか? 興味のある部分の前後のテキストを一致させる必要はありません

  • onの/s修飾子tr///は、/d

  • パイプでもコンマでもない文字のすべての部分文字列を収集する方がはるかに簡単です

これが私がそれを書いた方法です

use strict;
use warnings;

while (my $line = <DATA>) {
    if ($line =~ m/host="(\S+)"/) {
        (my $href = $1) =~ tr/!$()//d;
        my @values = $href =~ /[^,|]+/g;
        print "@values\n";
    }
}

__DATA__
<tag host="xyz|abc" some info />
<tag host="ijk,cdf" some info />

出力

xyz abc
ijk cdf
于 2013-04-16T05:31:47.523 に答える