簡體   English   中英

我如何告訴Perl的grep它應按字面意義使用給定的字符串?

[英]How do I tell perl's grep that it shall use the given string literally?

我想檢查一個Perl數組是否提供一定的值。

如何檢查Perl數組是否包含特定值? 告訴我可以使用grep( /^$value$/, @array )來檢查$value是否已經包含在@array

只要$value沒有特殊字符,此方法就起作用。 不幸的是,我的數組元素是Visual Studio項目的路徑,看起來像$(MY_USER_MACRO)/includes/myfile.h對於這些元素, grep( /^$value$/, @array )始終返回false盡管有很多這樣的元素@array已經存在的條目。

我認為出現此問題是因為$value包含$字符,因此以某種方式中斷了grep執行。

有沒有辦法告訴grep從字面上接受給定的字符串? 如果沒有:那我該如何解決我的問題?

引用您的正則表達式:

grep( /^\Q$value\E$/, @array )

您也可以這樣做,因為您正在測試相等性:

grep( $_ eq $value, @array )

grep { index($_, $value) >= 0} @array;

perldoc -f索引

索引STR,SUBSTR,位置
索引STR,SUBSTR
索引函數在另一個字符串中搜索,但沒有完整的正則表達式模式匹配的類似通配符的行為。 它返回POSITION或之后STR中第一次出現SUBSTR的位置。 如果省略POSITION,則從字符串的開頭開始搜索。 字符串開頭之前或結尾之后的POSITION分別視為字符串的開頭或結尾。 POSITION和返回值基於0(或將$ [變量設置為-但不要這樣做)。 如果未找到子字符串,則“ index”返回比基數少一個的值,通常為“ -1”。

上述解決方案的另一種解決方案是,如果您僅關心至少一個匹配值的存在,而又不關心其中有多少個匹配值,則可以使用List::Utilany函數。

use List::Util 'any';

if( any { $_ eq $value } @array ) {
  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM