2012-05-08 11 views
3

私はPerlでこれを行うソリューションを探しています。Perlのパターンマッチングすべての一致する部分だけを出力しますが、残りの部分は出力しません

例: 私の文字列の場合:

my $content = 'toto /app/blah titi\nhuh/app/ttt wew'; 

と私のパターンは次のとおりです。私は、アレイ内の出力として取得したい/app/something/app/blah/app/ttt

grep -E -o '\/app\/[a-z]*'が何をするか、基本的である)

私はそれが仕事を得ることができません! 私が試した:

my $content = 'toto /app/blah titi\nhuh/app/ttt wew'; 
$content =~ m/(\/app\/[a-z]*)/; 
print "Group: $1 $2\n"; 

をこれだけプリント:/app/blah(ない/app/ttt

と、とにかく、私はテーブルに結果を配置する方法がわからない:

my (@table) = @_; 

テーブルには何も入っていません!

あなたは正規表現を作るために/g修飾子を使用したいTHX

答えて

5

がリストとしてすべての一致を返す:

@table = $content =~ m/(\/app\/[a-z]*)/g; 
print "Group: @table\n"; 

また、@_は、正規表現とは何の関係もありません。むしろ、現在のサブルーチンに渡されたパラメータのリストです。私はPerlが1つのパートを演じるだろういくつかの簡単なbashのスクリプトに1つのライナーに取り組んでいた

+0

そして、あなたがしたいコマンドラインからではありません試合からfor loopを作る: '[「$(printfの「A0、B1 \ nc2 a3 \ n '| perl -ne 'print m/a。/ g') "=" a0a3 "] || exit 1' –

0

、これは私の仕事:複数行と

$ echo foo000bar000baz | perl -ne 'for(m/(foo)|(baz)/g){ if ($_ ne "") { print "$_\n"}}'    
foo 
baz 

ワークスすぎ

$ echo 'foo 
> 123 
> bar 
> 456 
> baz ' | perl -ne 'for(m/(foo)|(baz)/g){ if ($_ ne "") { print "$_\n"}}' 
foo 
baz 

説明(赦し、 Perlで高度なレベルではないので私の間違いを修正してください):

STDINperlにパイプされました:cat $file

  1. m/Regular Expression within parenthesis indicating capture group/g
  2. の上に印刷if試合は""(空)
関連する問題