[碼海拾貝 之Perl]在字符串數組中查找特定的字符串是否存在


前言

檢索一個字符串是否存在於一個數組中, 最主要的想法應該就是對數組進行循環, 逐個推斷數組的每一個元素值和給定的值是否相等。

(在Java語言還能夠把數組轉成 List , 在 list 中直接有 contains 方法能夠使用)

看一段簡單的代碼:

my @arr2 = qw(str1 str2 str3 str4);
foreach(@arr2)
{
	if($_ eq "str2")
    {
    	print "str2 exist in Array!\n";
    	last;
    }
}

這段代碼看起來挺簡潔,也不難理解。 可是在Perl 在還有第二種方法。僅僅須要一行代碼就能達成這種效果。 就是使用 grep 函數


grep 簡單介紹

grep 的全稱是 Global Regular Expression Print, 翻譯一下是全局正則表達式版本號。


假設使用過Linux命令的話對這個詞應該不陌生。


看一個常見的linux 命令

ps -ef | grep java
ps -ef 是查看全部的進程

加上 grep java 的意思是 搜索系統進程中包括 java 名字的進程。

也就是說在linux 中, grep 能使用正則表達式搜索文本。 並把匹配的行打印出來。



觸類旁通, 在Perl 中  grep 函數的作用也相似


Perl grep 函數

在Perl 中 , grep 函數的調用方式有兩種:

方式1. grep BLOCK LIST

方式2. grep EXPT, LIST

BLOCK: 表示一個Code 塊, 通經常使用 {}表示;

EXPR 表示一個表達式。 一般是正則表達式

LIST: 要匹配的列表

grep函數對列表里的每一個元素進行BLOCK或EXPR匹配,它遍歷列表。並暫時設置元素為$_。

在列表上下文里,grep返回匹配命中的全部元素,結果也是個列表。

在標量上下文里,grep返回匹配命中的元素個數。


比較一下以下的代碼:

my @arr3 = qw(str1 str2 str3 str4 str11);
my $str = "str1";
my $result =grep /^$str/, @arr3;
my @result2 =grep /^$str/, @arr3;
print "grep result=$result \n";            # 返回個數
print "grep result2=@result2 \n";       # 返回元素

這里在數組中匹配以str1 開頭的字符串元素

(提示 在正則表達是中:^-- 表示開頭  , $ 表示結尾 )

所以要精確匹配到某個字符串, 使用例如以下方式:

my $result =grep /^$str$/, @arr3;

到此 , 標題所給出的議題也就達成了。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM