[英]Perl Grep command to search in array
我正在使用Perl和grep命令在数组输出中查找模式。 我有兴趣在数组中搜索以下文本:
/tmp/12345.hash
12345
可以是任何数字序列,例如234
或567889
但/tmp/
和.hash
将保持一致。 我对regex不太满意,因此不确定如何构建正确的regex语句。
@line = grep /hash/, @exp;
我最初的搜索只是看单词hash,但在其他行上匹配,结果我得到了错误的结果。
正则表达式可让您以更高的精度将需求编码为“模式”:
my @filtered = grep { m{^/tmp/[0-9]+\.hash$} } @all;
我将{}
用作分隔符,因为通常的//
必须将模式中的每个/
转义。 然后,在前面需要m
(与//
分隔符不同,在此处可以省略m
)。
锚^
匹配字符串的开头(如果/m
“修饰符”有效,则匹配其他位置) † 。 /tmp
似乎是路径的开始,但是如果前面有(例如)前导空格,则上面的内容将不匹配(除非您将其更改为^\\s*/tmp
以便允许可选的空格) 。 仔细考虑您的数据。
$
与字符串的末尾匹配,如果有一个则匹配末尾的换行符(如果/m
修改此字符,则在末尾) † 。 要在hash
后也将字符串与更多字符匹配,请删除$
。
模式本身设置了您在问题描述中要说的内容:必须有一个整数,该整数是变化的,其余的是固定的。
perlretut教程随附了Perl自己的(优秀)文档。
†使用修饰符$str =~ /.../m
,该字符串被视为多行字符串,因此,如果其中包含换行符,则该正则表达式中的^
和$
匹配每行的开头和结尾为好。
始终只匹配字符串末尾的锚点是\\z
(另请参见\\Z
,它与$
匹配,但对/m
不敏感)。 请参阅persre中的断言 ,并在此页面上查看答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.