繁体   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