【问题标题】:How to avoid variable substitution in Perl regex?如何避免 Perl 正则表达式中的变量替换?
【发布时间】:2015-02-11 01:54:03
【问题描述】:

我有以下正则表达式:

my ($pkg) = ( $xmldirname =~ /$db(.*)^/ );

它应该做的是:检查xmldirname是否以“db”开头($)并将字符串的其余部分放入$pkg。

它的作用是:“全局符号 $db 需要明确的包名”。

我该怎么做?使用 qr// 也不起作用。

是的,好的,我明白了。 $ 是结束,而不是开始。对不起……

【问题讨论】:

  • 有人可以关闭或删除它吗?这个问题一开始就错了,任何答案都是浪费时间……
  • 感谢您的反对。

标签: regex perl variable-substitution


【解决方案1】:

您可以使用反斜杠 (\) 转义 $,使其失去其特殊含义:

my ($pkg) = ( $xmldirname =~ /\$db(.*)^/ );

或者,您可以为m(实际上是任何类似引号的运算符)运算符指定任意分隔符,并使用单引号(')禁用字符串插值:

my ($pkg) = ( $xmldirname =~ m'$db(.*)^' );

Quote and Quote-like Operators

【讨论】:

  • 尴尬地简单...谢谢。似乎我认为 \ 只与正则表达式引擎本身的文字有关。
  • 只是我用“$”作为行首,应该是^ ...所以这个问题应该被取消。
【解决方案2】:
  • 你可以转义$

  • 在正则表达式的开头而不是末尾添加锚点^

代码可以

my ($pkg) = ( $xmldirname =~ /^\$db(.*)/ );

测试

$xmldirname = '$dbhello';
my ($pkg) = ( $xmldirname =~ /^\$db(.*)/ );
print $pkg;

将输出为

hello

【讨论】:

    【解决方案3】:

    在我看来你误用了锚点。

    它应该做的是:检查xmldirname是否以“db”开头($)并将字符串的其余部分放入$pkg。

    使用这个:

    my ($pkg) = ( $xmldirname =~ /^db(.*)$/ );
    

    您也可以删除终端$:

    my ($pkg) = ( $xmldirname =~ /^db(.*)/ );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2010-12-19
      相关资源
      最近更新 更多