【问题标题】:Perl, Assign to variable from regex matchPerl,从正则表达式匹配分配给变量
【发布时间】:2013-01-20 20:33:18
【问题描述】:

我对 perl 比较陌生,check_ilo2_health.pl 中有一个示例 sn-p 代码,其中有一段语法我不明白它是如何工作或为什么工作的。代码 sn-p 正在逐行解析 SSL 客户端数据,在本例中为 XML。

if ( $line =~ m/MESSAGE='/) {
   my ($msg) = ( $line =~ m/MESSAGE='(.*)'/);  #<---- HERE

   if ( $msg !~ m/No error/ ) {
      if ( $msg =~ m/Syntax error/ ) {  #...etc

有问题的 XML 示例:

<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
 />

所以在这种情况下,if 语句采用 XML 示例的 MESSAGE 行。我了解 my ($msg) 将变量视为一种列表,并且我了解正则表达式如何匹配;但是,我不明白的是 $msgassignedNo error 的语法。 perl 似乎正在玩弄括号语法等以使其正常工作。虽然它有效,但我想知道它是如何工作的。任何帮助将不胜感激。

【问题讨论】:

标签: regex perl syntax variable-assignment parentheses


【解决方案1】:

Perlretut, Extracting-matches:

... 在标量上下文中,$time =~ /(\d\d):(\d\d):(\d\d)/ 返回真或假值。然而,在列表上下文中,它返回匹配值列表($1,$2,$3)

所以,在

($msg) = ( $line =~ m/MESSAGE='(.*)'/);

( $line =~ m/MESSAGE='(.*)'/) 返回捕获组的匹配列表。您有一个捕获组,因此其内容随后存储在 ($msg) 中。

【讨论】:

  • 完美,谢谢!这是有道理的。我会赞成您的回答,因为您提供了指向您的来源的链接,但我的声誉仍然不到 15。那好吧。 +1
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多