为啥我收到错误:Unmatched ( in regex; 由 <-- HERE 标记?

Posted

技术标签:

【中文标题】为啥我收到错误:Unmatched ( in regex; 由 <-- HERE 标记?【英文标题】:Why am I getting the error: Unmatched ( in regex; marked by <-- HERE?为什么我收到错误:Unmatched ( in regex; 由 <-- HERE 标记? 【发布时间】:2021-10-25 07:50:43 【问题描述】:

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

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

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

基本上,我要做的是浏览一段文本,找到所有 URL 并将一些内容附加到域的末尾。例如: https://thisisalink.com/navigate/page

我在运行该代码时不断收到此错误:

正则表达式中不匹配的 [;由 第 1 行标记。

如何解决这个问题?

【问题讨论】:

一个建议:您应该逐步构建您的正则表达式,而不是试图在第一次尝试时就将整个事情做好。例如,您尝试匹配文字括号 (\(),这似乎不太可能出现在 URL 中。此外,您似乎想使用/gxi 标志,只是它们出现在正则表达式的中间而不是末尾。 【参考方案1】:

$] 是一个special variable,包含当前使用的 Perl 解释器版本。因此,[A-Z0 9+&amp;@#%=~_|$] 被内插为[A-Z0 9+&amp;@#%=~_|5.032001(在我的 Perl 5.32.1 上),因此开场 [ 是无与伦比的。要解决此问题,请使用 \$ 转义 $

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

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

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

【讨论】:

以上是关于为啥我收到错误:Unmatched ( in regex; 由 <-- HERE 标记?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到此错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column in 'sdate' 'field

知道为啥我会收到此错误吗?

jsp调用servlet,调试到main时报错:Unmatched braces in the pattern.请问怎么回事啊?

myeclipse打不开jar包,显示“未能打开编辑器:Unmatched braces in the pattern.”我的是汉化的,

为啥 cordova 选择了错误的 JDK 版本?

为啥我不能调用我的结构信号量方法?