[英]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::Util
的any
函數。
use List::Util 'any';
if( any { $_ eq $value } @array ) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.