2

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) = @_;

テーブルには何も含まれていません!

どうも

4

2 に答える 2

5

修飾子を使用/gして、正規表現がすべての一致をリストとして返すようにします。

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

また、@_正規表現とは何の関係もありません。むしろ、現在のサブルーチンに渡されたパラメーターのリストです。

于 2012-05-08T22:03:29.973 に答える
0

Perlが一部を演じる簡単なbashスクリプトのワンライナーに取り組んでいましたが、これは私にとってはうまくいきました:

$ 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 の上級レベルではないので、間違いを許して訂正してください):

STDINパイプ先perl: のように何でもかまいませんcat $file

  1. m/Regular Expression within parenthesis indicating capture group/g
  2. for loop上記のマッチから作る
  3. 印刷if一致はありません""(空)
于 2017-07-05T11:42:15.343 に答える