【问题标题】:Perl regular expression is not matching with \w+Perl 正则表达式与 \w+ 不匹配
【发布时间】:2020-02-19 14:02:37
【问题描述】:

我正在尝试从作为数据库值的标量变量中提取一些数据:

在这里复制我的代码

$data = "header1        header2     header3     header4     header5 
-------------------------------------------------------
data1           1a          1b          1c          1d
data2           2a          2b          2c          2d
data3           3a          3b          3c          3d
(3 rows affected)";

if ($data =~ /header5\s+[\-|\s+]*(\w*)[^(]*/){
    print $1;
    print "inside if\n";
}
else {
    print "else part\n";   
}

这里我要取出以下数据:

data1           1a          1b          1c          1d
data2           2a          2b          2c          2d
data3           3a          3b          3c          3d

为此,我使用了正则表达式。

但在这里我可以看到 $1 打印 data1 而不是直到最后的值。

我怎样才能拥有$1 中的所有(3 行数据)数据?请帮助使用正则表达式。

【问题讨论】:

    标签: regex perl match


    【解决方案1】:

    (\w*) 匹配 0 个或多个单词字符,即 data1 在正则表达式找到此匹配项的位置。直到( 的其余文本不会被捕获到该组中。

    使用

    /header5\s[-\s]*([^(]*)/
    

    online demo

    模式详情

    • header5 - 文本字符串
    • \s - 一个空格
    • [-\s]* - 0 个或多个连字符或空格
    • ([^(]*) - 第 1 组($1 内容):除 ( 之外的 0 个或多个字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 2016-06-29
      • 2011-08-04
      • 1970-01-01
      相关资源
      最近更新 更多