gpt4 book ai didi

perl - Perl 中的\Q 是什么?总是需要使用\E吗?

转载 作者:行者123 更新时间:2023-12-02 15:30:11 31 4
gpt4 key购买 nike

我刚刚阅读了有关 \Q\E 的内容,我正试图完全理解它们。根据perlre :

\Q quote (disable) pattern metacharacters until \E

\E end either case modification or quoted section, think vi

所以我做了几个测试:

$ perl -e 'print "hello\n" if "he\\tllo" =~ /\Q\t/'
hello
$ perl -e 'print "hello\n" if "he\\tllo" =~ /\t/'
$

如果我理解正确,没有 \Q 它不会评估为 True 因为它将 \t 视为制表符。

然后我使用了 \E,我看不出有什么不同:

$ perl -e 'print "hello\n" if "he\\tllo" =~ /\Q\t\E/'
hello

如果我给出一个更宽的字符串和包含文字 \t 和制表符的模式:

$ perl -e 'print "hello\n" if "he\\tl\tlo" =~ /\Q\t\E.*\t/'
hello

它似乎可行,因为它将第一个 \t 视为固定字符串,而第二个 \t 被视为制表符。

那么 \Q\E 应该这样使用吗?也就是说,我们是否将“干净”的字符串包含在 \Q\E 之间?如果一切都应该被视为文字,那么只使用 \Q 是否正确?

最佳答案

\E 标记结束,不仅是 \Q,还有其他转义符,例如 \U。因此,当您需要 \Q 序列结束时,您可以使用它。但我认为你想得太多了。 \Qquotemeta() 的转义版本.

"(foobar" =~ /\Q(fo+bar/    # false, "+" gets escaped
"(foobar" =~ /\Q(\Efo+bar/ # true

我不会说“应该使用”。如果您不使用 \E,则 \Q 会继续您的整个模式。

查看 \E 工作原理的更具体方法是将它与 \U 一起使用:

$ perl -lwe' print "\Ufoobar" '
FOOBAR
$ perl -lwe' print "\Ufoo\Ebar" '
FOObar

关于perl - Perl 中的\Q 是什么?总是需要使用\E吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27796987/

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