【问题标题】:Unmatched ( in regex; marked by <-- HERE with variable name不匹配(在正则表达式中;由 <-- HERE 标记,带有变量名
【发布时间】:2016-03-29 14:22:30
【问题描述】:

我用下面这行定义了 perl 变量 bestphone

my $bestphone = (sort {$targets{$b} <=> $targets{$a}} keys %targets)[0];

当这个变量是(,我得到以下行的错误:

if ((@thing == 1)&&($thing[0] =~ /return '$bestphone';/)) {

出现错误:

不匹配(在正则表达式中;由

我该如何解决这个错误?

【问题讨论】:

  • $thing[0] =~ /return '$bestphone'/;/) 到底应该做什么?它有 3 个斜杠/,这是一个语法错误。

标签: regex perl


【解决方案1】:

您可以使用quotemeta 转义$bestphone 中的特殊字符。

例如:

$thing[0] =~ /return '\Q$bestphone\E';/

【讨论】:

  • @Biffen 我以为\Q..\E 和使用qutometa 一样?
  • @Biffen perl -E '$s=q{\Q\E}; say quotemeta $s; say "\Q$s\E"' 都给出输出:\\Q\\E
  • @Biffen:“也证明 quotemeta 与 \Q...\E 不同” 我不明白你的意思。 quotemeta\Q...\E 产生相同的结果,你说这证明它们不一样?请解释。 perldoc -f quotemeta这是在双引号字符串中实现 \Q 转义的内部函数,所以我建议你弄错了
  • @Biffen:我不明白你为什么会这样。 quotemeta\Q...\E 都转义了任何非单词字符,因此它们都转义了反斜杠并返回 \\Q\\E。除了插入标量变量外,没有办法将参数传递给\Q\E,但我向你保证它们是相同的。如Håkon Hægland has shown,如果$s = '\Q\E'quotemeta($s)"\Q$s\E" 都等于字符串\\Q\\E
【解决方案2】:

请去掉“;”后面的“/” $besrphone=quotemeta $bestphone 然后再试一次

【讨论】:

  • 哦";"也要删除
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 2015-07-06
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多