【问题标题】:using array elements for pattern matching in perl在 perl 中使用数组元素进行模式匹配
【发布时间】:2012-07-14 01:40:54
【问题描述】:

Perl 和正则表达式的新手不用说,我正在尝试在 perl 正则表达式中使用数组中的元素。这是sn-p

my $temp  = $line =~ s/somestring[^\n]*$_// for @myarray;

如果我硬编码字符串而不是 $_ 它工作正常。 $_ 也可以单独打印字符串。那么我做错了什么?即使使用 for 循环的扩展版本也不会产生匹配项。

P.S 只是为了澄清数组只有一个元素,我知道它与该行匹配。

【问题讨论】:

  • 我不是 Perl 开发人员,但在 REGEX 中 $ 有特殊含义 - 它锚定到字符串的末尾,因此可能需要转义。
  • @utkanos:没必要。标量变量插值在 Perl 正则表达式中工作得很好。 perldoc perlop 在“引用和引用类似运算符”部分下。
  • 这就是我发布评论而不是答案的原因。我只是说,在一般的 REGEX 语法中,$ 具有特殊含义。我不是 Perl 开发人员,所以我没有提交 - 我只是在浮动这个想法。
  • 更多代码可能会有所帮助,例如说明问题的实际值。我不确定你想要完成什么或它是如何失败的。
  • 谢谢@RickF。对我来说,这确实是一个相当微不足道的疏忽/误解,我的问题得到了回答。

标签: regex perl


【解决方案1】:

它应该可以添加括号,虽然我希望数组的内容没有特殊字符,因为你需要使用quotemeta 函数来转义它们。

my $temp;
($temp  = $line) =~ s/somestring[^\n]*$_// for @myarray;

【讨论】:

  • “特殊字符”问题是一个好点。 s/somestring[^\n]*\Q$_\E// 是更强大的解决方案,除非 OP 真的希望 $_ 的内容被视为一种模式。
  • 谢谢!它有帮助。稳健的解决方案始终是可取的。帮助我更好地开始学习 perl。
猜你喜欢
  • 1970-01-01
  • 2013-02-27
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多