【问题标题】:Perl non-greedy matchPerl 非贪婪匹配
【发布时间】:2012-06-12 19:21:00
【问题描述】:

我只想要捕获到 slash_flash 的第一个模式。

我试过了:

$var1 = slash_flash*_target_bit[*]_slash_hit\n

$var1 =~ s/^(.*)\*?(.*)$/$1/g if ($var1 =~ /\*/);

我得到了整个字符串:

> $var1 = slash_flash*_target_bit[*]_slash_hit

注意:$var1 可以以任何开头。所以你不能用特定的词或模式开始模式匹配。这就是我尝试 (.*) 的原因

【问题讨论】:

    标签: regex perl regex-greedy


    【解决方案1】:

    首先,发布您实际运行的代码。你说的不是真的,因为你发布的甚至都没有编译。

    继续前进。

    • \*? 可以匹配零个字符。
    • .* 可以匹配零个字符。

    所以一旦第一个 .* 匹配整个字符串,\*?.* 就会愉快地匹配零个字符。

    也许你想要

    $var =~ s/^([^*]*)\*.*$/$1/g if ($var1 =~ /\*/);
    

    可以简写为

    $var =~ s/^([^*]*)\*.*$/$1/;
    

    甚至是

    $var =~ s/^[^*]*\K\*.*$//;
    

    【讨论】:

    • 我有一个基于此的更新问题。如何使模式匹配以下两行中的任何一行:'code' $var1 = slash_flashold_target_bit[0] 或 $var1 = clone_flashnew_target_bit[5]
    • @cosmo kramer,取决于具体你想成为/.*/ 会起作用。 /^(?:slash_flashold_target_bit\[0\]|clone_flashnew_target_bit\[5\])\z/ 将仅匹配这两行。也许您正在寻找类似/_flashold_target_bit\[[0-9]+\]\z/ 的东西。
    猜你喜欢
    • 2011-08-25
    • 2013-06-09
    • 2017-10-16
    • 1970-01-01
    • 2013-08-25
    • 2015-02-11
    • 2017-05-07
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多