我有两个问题,但也很容易回答。可能只是新手的问题。 Google 上对此知之甚少。
第一:如何将 Perl 匹配运算符放入数组中? 例如所有这些字符:
{}[]()^$.|*+?\
然后与 foreach 一起使用吗?
第二,如果你有这个:
@array = qw(The $ quick ? brown | fox jumps over the lazy dog);
$string = "\? brown \|";
@new_array = grep(/$string/,@array);
如果@array是一些文本,例如包含美元符号、问号等,如何在@array中正确找到$string?如果您搜索正则表达式字符,它将变成运算符。如果你这样做:
$string =~ s/\$/\$/gi;
当然会得到相同的结果。
提前致谢。
最佳答案
这里的问题是:
$string = "\? brown \|";
这只是一种误导性的写法:
$string = "? brown |";
最好的解决方法是(选项 1)根本不使用字符串,而是使用模式对象:
$pat = qr/\? brown \|/;
@new_array = grep(/$pat/,@array);
或 (2) 在创建模式时使用 \Q
“引用”字符串中的任何正则表达式元字符:
$string = "? brown |";
@new_array = grep(/\Q$string/,@array);
如果失败,您可以确保您的字符串最终实际上包含 \?棕色\|
(而不只是?棕色|
)通过编写以下任何一个:
$string = "\\? brown \\|"; # option 3
$string = '\? brown \|'; # option 4
$string = "\Q\? brown \|"; # option 5
关于arrays - 如何在数组和 grep 中转义 Perl 正则表达式字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870091/