-1

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

我试过这个:

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

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

我得到了整个字符串:

> $var1 = slash_flash*_target_bit[*]_slash_hit

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

4

1 回答 1

2

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

继续。

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

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

也许你想要

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

可以缩短为

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

甚至到

$var =~ s/^[^*]*\K\*.*$//;
于 2012-06-12T19:40:51.853 回答