Why am I getting the error: Unmatched ( in regex; marked by <-- HERE?

Why am I getting the error: Unmatched ( in regex; marked by <-- HERE?

我无法弄清楚为什么我会收到标题中定义的错误。

这是我输入命令行的代码行:

perl -pi -e 's/(\/(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)' myfilepath

基本上,我想做的是浏览 body 文本,找到所有 URL 并在域末尾附加一些内容。例如: https://thisisalink.com/navigate/page <-- 我想忽略 ]

当我 运行 该代码时,我一直收到此错误:

Unmatched [ in regex; marked by <-- HERE in *)|[ <-- HERE A-Z0-9+&@#%=~_|5.030003)/gxi)/ at -e line 1, <> line 1.

如何解决这个问题?

$] 是一个 special variable,它包含当前使用的 Perl 解释器版本。因此,[A-Z0 9+&@#%=~_|$] 被插入为 [A-Z0 9+&@#%=~_|5.032001(在我的 Perl 5.32.1 上),因此开头的 [ 是不匹配的。要解决此问题,请使用 $:

转义 $
[A-Z0 9+&@#%=~_|$]

类似地,在前面的正则表达式中,您使用的是 [...$?...],只是 $? 也是一个包含 最后一个管道关闭返回的状态的 special variable ,反引号 (``) 命令,成功调用 wait() 或 waitpid(),或来自 system() 运算符 。这不会导致任何错误,因为它应该是一个整数,但它不会匹配您想要的 $?。再次使用 $?.

转义 $

一般来说,当你想匹配文字 $ 时,你应该转义它。