我怎么告诉perl的grep它应该逐字地使用给定的字符串?

时间:2014-04-15 14:11:47

标签: arrays regex perl grep

我想检查perl数组是否提供某个值。

How can I check if a Perl array contains a particular value?告诉我,我可以使用grep( /^$value$/, @array )来检查$value中是否已包含@array

只要$value没有特殊字符,此功能就可以使用。不幸的是,我的数组元素是visual studio项目的路径,看起来像$(MY_USER_MACRO)/includes/myfile.h。对于这些元素,grep( /^$value$/, @array )总是返回false,尽管@array中已经存在大量此类条目}。

我认为发生此问题是因为$value中包含$字符,因此会以某种方式中断grep执行。

有没有办法告诉grep字面上取得给定的字符串?如果不是:我怎么能解决我的问题?

3 个答案:

答案 0 :(得分:7)

引用你的正则表达式:

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

你也可以这样做,因为你正在测试平等:

grep( $_ eq $value, @array )

答案 1 :(得分:0)

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

perldoc -f index

指数STR,SUBSTR,POSITION
   索引STR,SUBSTR
           索引函数在另一个字符串中搜索一个字符串,但没有完整正则表达式模式匹配的类似通配符的行为。它            在POSITION或之后返回STR中第一次出现SUBSTR的位置。如果省略POSITION,则从头开始搜索            字符串。字符串开头之前或结束之后的POSITION分别被视为开头或结尾。位置            并且返回值基于0(或者您将$ [变量设置为 - 但不要这样做)。如果找不到子字符串," index"回报            一个小于基数,通常" -1"。

答案 2 :(得分:0)

上述方法的另一个解决方案是,如果您只关心至少一个匹配值的存在,并且您不关心它们中有多少匹配,则可以使用any函数来自{ {1}}。

List::Util