2011-05-30 66 views
1

我有一個看起來像這樣的數據:[*]VIM/Perl的正則表達式的標籤匹配問題

[Shift]);[Ctrl][Ctrl+S][Left mouse-click][Backspace][Ctrl] 

我想找到所有標籤這個字鼠標在其中。考慮到非貪婪符一致,我想這在Vim的\[.\{-}mouse.\{-}\],但取得這樣的結果,

[Shift]);[Ctrl][Ctrl+S][Left mouse-click] 

而不僅僅是需要,

[Left mouse-click] 

任何想法?最終,我還需要Perl語法的這種模式,所以如果任何人有一個解決方案在Perl中,也將不勝感激。

回答

4
\[[^]]*mouse[^[]*\] 

即,匹配一個開口支架,然後任意數量的未閉括號,然後在「鼠標」,則任何數量的非開括號的字符,最後是文字右括號。在Perl中應該是一樣的。

+1

@Rob肯尼迪 - 你']'不正確地轉義。 – manojlds 2011-05-30 05:10:56

+0

他們都很好,@Manojlds。你是否不知道當'[^'後面緊接着']','''是從字面上而不是作爲字符集的結尾?查看你自己:'echo'[Shift]); [Ctrl] [Ctrl + S] [鼠標左鍵單擊] [Backspace] [Ctrl]'| perl -nE'm /(\ [[^]] * mouse [^ [] * \])/;說$ 1''。引用[perlrecharclass](http://perldoc.perl.org/perlrecharclass.html):「如果'''是括號字符類的第一個字符(或第二個字符,如果第一個字符是插入字符),它會不代表班級的結束(因爲你不能有空班)......「 – 2011-05-30 06:10:45

+0

感謝您的解釋。它是特定於Perl嗎?不符合這裏 - http://regexr.com?2tsej – manojlds 2011-05-30 06:18:06

3

您可以使用以下正則表達式:

\[[^\]]*mouse.*?\] 
+0

這是Perl中的解決方案,證實它有效。謝謝! – danns87 2011-05-30 16:50:24