我很难弄清楚为什么我得到标题中定义的错误。
这是我在命令行输入的代码行:
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()操作符返回的状态。这不会导致任何错误,因为它应该是一个整数,但它不会像您希望的那样匹配$
或?
。再次使用$?
转义$
。
一般来说,当你想匹配一个文字$
时,你应该转义它。