在Perl和ECMAScript兼容的正则表达式风格中,我应该转义右括号字符吗



在Perl和ECMAScript兼容的正则表达式风格中,我应该转义右括号字符(即]}))吗?

从这个问题的答案来看,我不能跳过]括号,但在})(用于PCRE)的情况下,我必须这样做。当然,如果我想在相应的正则表达式序列(如(first)|second)[ab]])中使用它们,我必须转义它们,但其他情况呢?

例如,在以下情况下,我应该逃离它们吗?

正则表达式——str[]

输入字符串--str[]

PCRE很容易用pgrep:进行测试

echo 'str[]' | grep -P 'str[]'

我在Chrome浏览器中测试了JS,我按下F12进入控制台并尝试

"str[]".match(/str[]/)

Perl:

$ perl -wE'say "a]b" =~ /a]b/'
1
$ perl -wE'say "a]b" =~ /a]b/'
1
$ perl -wE'say "a}b" =~ /a}b/'
1
$ perl -wE'say "a}b" =~ /a}b/'
1
$ perl -wE'say "a)b" =~ /a)b/'
Unmatched ) in regex; marked by <-- HERE in m/a) <-- HERE / at -e line 1.
$ perl -wE'say "a)b" =~ /a)b/'
1

因此]}不需要被转义,而是可以被转义。必须转义)

请注意,以前不需要转义的某些{现在需要在Perl中进行转义。不过,这一变化的原因并不适用于大括号。

最新更新