[英]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.