我只想要第一个模式到slash_flash捕获。
我试过了:
$var1 = slash_flash*_target_bit[*]_slash_hit\n
$var1 =~ s/^(.*)\*?(.*)$/$1/g if ($var1 =~ /\*/);
我收回整个字符串:
> $var1 = slash_flash*_target_bit[*]_slash_hit
注意:$ var1可以从任何东西开始。因此,您无法使用特定的单词或模式开始模式匹配。这就是我尝试(。*)
的原因答案 0 :(得分:2)
首先,发布您实际运行的代码。你所说的不是真的,因为你发布的内容甚至都没有编译。
继续前进。
\*?
可以匹配零个字符。.*
可以匹配零个字符。因此,当第一个.*
与整个字符串匹配时,\*?
和.*
会很乐意匹配零个字符。
也许你想要
$var =~ s/^([^*]*)\*.*$/$1/g if ($var1 =~ /\*/);
可以缩短为
$var =~ s/^([^*]*)\*.*$/$1/;
甚至
$var =~ s/^[^*]*\K\*.*$//;