2016-12-14 58 views
-2

我想写一个Perl脚本来grep字符中的字符。所有的字符串都存储在一个数组中。我们遍历数组,并查看是否出现特定的单词,如果是这样的话,则查找特定的模式。perl正则表达式grep为一个字中的字符

my @array = ("Foo1", "Bar", "Baz", "Foo5", "Foo2", "Bak", "Foo3"); 
foreach my $ var (@array){ 
    if ($var =~ /Foo/){ 
     #Regex to grep for the number which is at the end of string Foo 
    } 
} 

欢迎任何线索。谢谢您的帮助。

************编辑于***********

感谢您的评论。

if ($var =~ /Foo/){ 
    /.Foo+([A-Z]+)/; 
    print $1, "\n"; 
} 

以上是我试过的代码,它没有打印任何东西。

+0

什么问题? –

+0

我们通常不会从头为您编写代码。解释你已经尝试了什么以及你遇到了什么困难。 –

+0

哦,你希望我们填写你的评论...给它一个自己去,并张贴你做了什么,如何不起作用,那么你会得到帮助。 –

回答

3

无约束匹配=~与您不使用的$ _变量匹配。此外,Foo之前的点意味着第二个正则表达式只有在Foo前面有一些东西(不是换行符)时才匹配。由于所有包含Foo的字符串都以它开头,即使您指定了$var =~,第二个正则表达式也不会匹配。

此外,您可以直接在条件中匹配数字。

最后,[A-Z]与数字不匹配。改为使用[0-9]

my @array = qw(Foo1 Bar Baz Foo5 Foo2 Bak Foo3); 
foreach my $var (@array){ 
    if ($var =~ /Foo([0-9]+)/){ 
     print $1, "\n"; 
    } 
} 
+0

感谢您的回复。这个正则表达式会起作用吗? '/ Foo +([A-Za-z_0-9] +)/;'然后使用'print $ 1'来打印该字符。 –

+0

为什么Foo后加号?你的数据是否也包含'Foooo'? – choroba

+0

我误解了+在我的正则表达式。现在明白了。 您的正则表达式修复了我的问题。谢谢您的帮助。 还有一个阻塞的东西,你能解释一下你的正则表达式中的'+'吗? –

1

试试这个你的第二个正则表达式

[^\w]*([0-9]) 

然后你可以使用第一组获得的数量。

+0

感谢您的回答 –

1
my @array = qw(Foo1 Bar Baz Foo5 Foo2 Bak Foo3); 
my @var = map(/Foo(\w+)/) @array; 

print @var ; 
+0

感谢您的回答。 –

相关问题