0
local_addr = sjcapp [value2]

この文字列を分割して、配列に と の 2 つの値を取得するにはどうすればよいです array[0] = sjcapparray[1] = value2

私がこれをしたら

@array = split('local_addr =', $input)

それから私のarray[0]持っていsjcapp [value2]ます。split関数自体で2つに分離できるようにしたい。

私はこのようなことを試みていましたが、うまくいきませんでした:

split(/local_addr= \s/, $input)
4

4 に答える 4

2

未確認ですが、こんな感じでしょうか?

@array = ($input =~ /local_addr = (\S+)\s\[(\S+)\]/);

ではなくsplit、これはリストコンテキストで正規表現一致を使用します。これにより、括弧で囲まれた部分の配列が得られます。

于 2013-06-12T22:11:23.100 に答える
1
~/ cat data.txt    
  local_addr = sjcapp [value2]
  other_addr = superman [value1492]
  euro_addr = overseas [value0]

データが実際にそれと同じくらい規則的に構造化されている場合は、空白で分割できます。コマンド ライン (マニュアル ページを参照) では、入力から呼び出されるフィールドの配列を魔法のように作成するperlrun(1)"autosplit" ( ) を使用するのが最も簡単です。-a@F

perl -lane 'print "$F[2] $F[3]" ' data.txt
sjcapp [value2]
superman [value1492]
overseas [value0]

スクリプトでは、配列の名前とその中の要素の位置をshift-ing またはsplice-ing で変更できます - おそらくこれよりもエレガントな方法ですが、動作します:

perl -lane 'my @array = ($F[2],$F[3]) ; print "$array[0], $array[1]" ' data.txt

または、自動分割を使用せずに、次のようにします。

perl -lne 'my @arr=split(" ");splice(@arr,0,2); print "$arr[0] $arr[1]"' data.txt
于 2013-06-14T07:42:33.937 に答える
0

試す :

if ( $input =~ /(=)(.+)(\[)(.+)(\])/ ) { 
   @array=($2,$4);
}    
于 2013-06-12T23:36:47.917 に答える
0

これは明らかに標準形式の構成ファイル行であるため、分割ではなく正規表現を使用します。正規表現をどのように構築するかは、完全な行の構文と、どの程度柔軟にしたいかによって異なります。

if( $input =~ /(\S+)\s*=\s*(\S+)\s*\[\s*(\S+)\s*\]/ ) {
    @array = ($2,$3);
}
于 2013-06-12T23:56:39.297 に答える