2012-06-12 136 views
-1

我只想要第一種模式,最多可捕獲到slash_flash。Perl非貪婪匹配

我嘗試這樣做:

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

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

我得到整個字符串返回:

> $var1 = slash_flash*_target_bit[*]_slash_hit 

注:$ VAR1可以和任何啓動。所以你不能用特定的單詞或模式開始模式匹配。這就是爲什麼我試圖(。*)

回答

2

首先,張貼您實際運行的代碼。你說的不是真的,因爲你發佈的內容甚至沒有編譯。

繼續前進。

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

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

也許你想我已經在此基礎上更新的問題

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

可縮短至

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

甚至

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

。 'code'$ var1 = slash_flashold_target_bit [0]或$ var1 = clone_flashnew_target_bit [5] –

+0

@cosmo kramer,取決於你想成爲'/.*/'的具體情況。會工作。 '/ ^(?:slash_flashold_target_bit \ [0 \] | clone_flashnew_target_bit \ [5 \])\ z /'只會匹配這兩行。也許你正在尋找'/ _flashold_target_bit \ [[0-9] + \] \ z /'之類的東西。 – ikegami