arrays - 如何在数组和 grep 中转义 Perl 正则表达式字符?

标签 arrays regex perl

我有两个问题,但也很容易回答。可能只是新手的问题。 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/

相关文章:

regex - 如何在 perl pie 单行中转义括号?

bash - 使用 Perl 通过 Gmail 发送邮件

php - 比较两个不同的多维数组并突出显示变化

java - C++将数字添加到数组对象?

php - 简单数组重定向

python - 如何使用正则表达式获取嵌套组

csv - 在 Perl 中访问从 CSV 导入的哈希时出现问题

python - 使用 matplotlib 和 numpy 绘制一行 3 个图,但得到 "IndexError: too many indices for array"

Java:对 2.5M 字符串使用互斥正则表达式 (15) 的有效方法?

javascript - 如何修改时间正则表达式?