2016-04-08 5 views
-1

私はperlを使って行のピリオドの数を調べ、それが定義した数字を含んでいれば、一緒に線。ここでIF文中の文字のx個の出現数についてperl内の文字列を検索

は、私がこれまで

 if (($lines [0] =~ /./) ==3){ 
      $lines [3] = $lines [0][3..-1] 
       if ($lines [2] =~ /'get'/); 
        print Output "qa;$lines[2];get\n" 

持っているもので、私は近くだような気が十分に接近していない買います。

ここに私が読んでいるテキストファイルのサンプルがありますが、私が持っているものは一致していません。

...State [ ] 
.....County [ ] 
.......City [ get set clear ] 
.......ZIP [ get detail ] 

目的は、出力が完了したときにこのように見えるようにすることです。私は本当に今すぐコマンドを取得したいだけです。

は、QA、国家、郡、市は

を取得しかし、私はそれがピリオドにマッチするように見えることはできません。どんな助けも素晴らしいだろう。

+1

あなたはエスケープする必要があります。正規表現では: '/\./' – toolic

答えて

0

あなたは本当に近くにいるわけではありません。正しい方向にあなたを得るためのいくつかのポインタは次のとおりです。 m //一致が見つかった回数を返しません。スカラーコンテキスト(あなたと同じように数値と比較する)では、単一のマッチがまったく見つからなかったかどうかに応じて、trueまたはfalseを返します。

リストの文脈では、m //はすべての一致を返しますが、そのリストを配列に割り当ててから、配列のサイズを見つける必要があります。それは

文字列は、文字配列でない特殊文字であるとして、あなたは、パターンマッチにピリオドをエスケープする必要が

一致しました。 $ lines [3]は、別の[]添え字を末尾に置くことによって文字の配列のように参照することはできません。文字列を取得するのに役立つ関数があります。例えば、substrを見てください。 (たとえ-1が配列の最後のインデックスを表していても、[3 .. -1]は有効な添字にはなりません)

2番目のパターンマッチで一重引用符を取り除きます。つまり、文字通りシングルクォート、g、e、t、一重引用符を探したいとしています。

よろしくお願いします。

関連する問題