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

我正在为一些快速的 bash 脚本编写一个内衬,其中 Perl 将扮演一个角色,这对我有用:

$ 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 的高级水平):

STDINpiped to perl: 可以是任何东西,比如cat $file

  1. m/Regular Expression within parenthesis indicating capture group/g
  2. for loop从上面的比赛中制作
  3. 打印if匹配不""(空)
于 2017-07-05T11:42:15.343 回答