为什么我必须在我的正则表达式中逃避`]`?

One*_*ace 1 regex perl

运行以下内容时出错:

perl -ne 'print unless (/[A-G][\d|\s|m|#|$]/)' file
Run Code Online (Sandbox Code Playgroud)

错误:

Unmatched [ in regex; marked by <-- HERE in m/[A-G][ <-- HERE \d|\s|m|#|5.022001/ at -e line 1, <> line 1
Run Code Online (Sandbox Code Playgroud)

我通过逃避]行的末尾解决了错误:

perl -ne 'print unless (/[A-G][\d|\s|m|#|$\]/)' file
Run Code Online (Sandbox Code Playgroud)

为什么我要逃避最后一次]?什么阻止支架匹配?

我注意到所有[]比赛都不是这种情况.这是一个特例吗?

Tud*_*tin 7

我认为$需要在那里进行转义,因为$]是用于Perl解释器的修订,版本和颠覆的特殊变量