为啥我收到错误: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+&@#%=~_|$]
被内插为[A-Z0 9+&@#%=~_|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.”我的是汉化的,