【问题标题】:Regex Matching Square Brackets正则表达式匹配方括号
【发布时间】:2014-02-07 00:31:39
【问题描述】:

我正在解析一个日志文件,并且一直在尝试为以下令牌编写正则表达式

sshd[7623]:

我可以匹配 sshd 字符串,但是当匹配左方括号时,perl 只会抛出一个关于缺少右方括号的错误。

如果我尝试同时匹配两者,如下所示,我也不会捕捉到。

$re1='(\\[)(\\d+)(\\])';
$re2='(\\[.*?\\])';

但两者都没有奏效。什么才是合适的搭配方式?

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    这会捕获括号前的单词和括号内的数字:

    use warnings;
    use strict;
    
    if ('sshd[7623]:' =~ /(\w+)\[(\d+)\]:/) {
        print "word=$1 number=$2\n";
    }
    
    __END__
    
    word=sshd number=7623
    

    perldoc perlre

    【讨论】:

      【解决方案2】:
      use strict;
      use warnings;
      
      while (<DATA>)
      {
         if ( /^(\w+)\[(\d+)\]/ )
         {
            print "Found a $1 line with process ID $2\n";
         }
      }
      
      __DATA__
      sshd[1234]: Foo
      imapd[5678]: Bar
      sshd[9012]: Baz
      pop3d[3456]: Quux
      

      【讨论】:

        猜你喜欢
        • 2013-06-18
        • 1970-01-01
        • 2018-04-06
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多