gpt4 book ai didi

regex - 当 Perl 正则表达式插值关闭时,哪些转义被排除在外?

转载 作者:行者123 更新时间:2023-12-01 05:29:58 24 4
gpt4 key购买 nike

我很好奇当关闭插值时哪些转义序列被排除在 Perl 正则表达式之外,例如使用撇号(单引号)作为 m'' 的分隔符,还有为什么。 perlop中的插值说明提到:

No interpolation is performed at this stage. Any backslashed sequences including \\ are treated at the stage to parsing regular expressions.



但是,对 perlre 中的转义序列进行了测试。 , 表明并非所有转义序列都被相同对待。

因此,我测试了 perlre 的“转义序列”部分中列出的所有简单转义。 ,发现有些是“关”的,有些是“开”的。 perlrebackslash 中的“on”和“off”转义与“字符转义”和“转义修饰符”描述之间似乎存在对应关系。 , 分别。到目前为止,我还没有测试该页面上列出的所有可能的转义,只是来自这两个组的那些。

即使我测试了所有可能的转义,我也不确定我是否理解为什么在插值关闭时有些仍然可以工作,而有些则不能。任何人都可以启发我吗?

更新:正如@tchrist 所建议的,这里有一些例子。我基本上使用了以下 shell 代码的变体来针对来自 STDIN 的一些用户输入来测试这些:
perl -e "use 5.012; while(<>) { say 'YES' if m'\t';}"

逃脱 \e , \f , \n , \r , 和 \t ,当用于非插值匹配结构时,例如 m'\t' (等)仍将匹配它们转义的特殊字符,而不是它们的文字字符串表示。这与我在使用内插匹配形式(例如 m/\t/ )时看到的匹配行为相同,这就是我所说的仍然“工作”的意思。

另一方面,修饰符如 \L , \U , \l , 和 \um'' 内部的功能不同作为 m// 的内部.例如 m'\uthis'与输入不匹配:“这是一个字符串”,而 m/\uthis/确实匹配这样的输入。第一种形式将匹配输入:“\uthis is a string。”

最佳答案

它是单引号字符串和双引号字符串之间的区别,这些规则与正则表达式模式分开
所以m'$foo'就像 '$foo'并且不喜欢 "$foo"

use Data::Dump;
$foo = 12;
dd qr/$foo/i;
dd qr'$foo'i;
__END__
qr/12/i
qr/$foo/i

所以如果使用插值,你匹配 12
如果您禁用了插值,则匹配 $ , 行尾(或字符串)后跟 foo

更多相关信息,请访问 http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators

更新:附带说明,除了 Data::Dump 之外,Data::Dumper 和 Data::Dump::Streamer "dump" qr'$foo'i错误地为 qr/$foo/i

关于regex - 当 Perl 正则表达式插值关闭时,哪些转义被排除在外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com