为什么我收到错误:不匹配(在正则表达式中;用 < 标记——这里?



我很难弄清楚为什么我得到标题中定义的错误。

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

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

基本上,我要做的就是浏览一段文本,找到所有的url,并在域名的末尾添加一些东西。例如:https://thisisalink.com/navigate/page <——我想忽略[

当我运行这段代码时,我一直得到这个错误:

Unmatched [in regex;伴随着& lt;——在*)| (& lt;——这里A-Z0-9 +, @ # % = ~ _ | 5.030003)/gxi)/e 1号线,& lt;比;1 .

如何解决这个问题?

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

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

类似地,在正则表达式的前面,您使用的是[...$?...],除了$?也是一个特殊变量,它包含由最后一个管道close、backtick(' ')命令、成功调用wait()或waitpid()或system()操作符返回的状态。这不会导致任何错误,因为它应该是一个整数,但它不会像您希望的那样匹配$?。再次使用$?转义$

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

最新更新