2

我有一个包含(head,b,v,.,b,v,end)的数组。
我试图找到并得到“。”,然后做某事(例如:打印出来)。

由于未知原因,我无法得到“。”

所以我做了一个简单的代码来计算数组中 char 的出现。这是代码:

$stylefile="log2.style";
open ("styles", $stylefile) or die ("can't open file");

while (<styles>)
{
$temp = $_;
chomp($temp);
push @style,$temp;
}    
print @style;
# here is the array "headbv.bvend"

@bar = grep(/v/i, @style);
print @bar;
# it prints out vv

@fullstop = grep(/./i, @style);
# it prints out the entire array values.

任何线索如何获得“。”的出现。?

4

3 回答 3

6

使用/[.]/而不是/./匹配句号。

man perlre了解更多详情。

于 2014-03-20T09:04:27.180 回答
4

您也可以使用/\./来匹配句号。

测试程序:

$ perl -e ' $_ = "a.b.c"; @f = m/(\.)/g; print "@f\n" '
. .
于 2014-03-20T09:35:17.903 回答
1

点是正则表达式中的特殊字符。它匹配任何字符 - 这解释了您所看到的行为。

要使特殊字符与自身匹配,您需要使用反斜杠对其进行转义。

@fullstop = grep(/\./i, @style);

您可能应该阅读Perl 正则表达式教程(或参考

于 2014-03-20T11:00:03.633 回答