我怎么告诉Perl的grep它应该使用给定的字符串呢?

eck*_*kes 1 regex arrays perl grep

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

如何检查Perl数组是否包含特定值?告诉我,我可以grep( /^$value$/, @array )用来检查是否$value已经包含在内@array.

只要$value没有特殊字符,这就可以工作.不幸的是,我的数组元素是视觉工作室项目的路径,看起来像$(MY_USER_MACRO)/includes/myfile.h这些元素,grep( /^$value$/, @array )总是返回,false尽管已经存在许多这样的条目@array.

我认为问题出现是因为其中$value包含了$字符,因此以某种方式打破了grep执行.

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

Tot*_*oto 7

引用你的正则表达式:

grep( /^\Q$value\E$/, @array )
Run Code Online (Sandbox Code Playgroud)

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

grep( $_ eq $value, @array )
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这两者并不完全相同.第一个匹配`$ value`和`$ value \n`,而第二个匹配`$ value`.第二个相当于`/ ^\Q $ value\E\z /` (4认同)