Perl非贪婪的比赛

时间:2012-06-12 19:21:00

标签: regex perl regex-greedy

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

我试过了:

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

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

我收回整个字符串:

> $var1 = slash_flash*_target_bit[*]_slash_hit

注意:$ var1可以从任何东西开始。因此,您无法使用特定的单词或模式开始模式匹配。这就是我尝试(。*)

的原因

1 个答案:

答案 0 :(得分:2)

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

继续前进。

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

因此,当第一个.*与整个字符串匹配时,\*?.*会很乐意匹配零个字符。

也许你想要

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

可以缩短为

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

甚至

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