VIM/Perl的正则表达式的标签匹配问题

问题描述:

我有一个看起来像这样的数据:[*]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中,也将不胜感激。

\[[^]]*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

您可以使用以下正则表达式:

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

这是Perl中的解决方案,证实它有效。谢谢! – danns87 2011-05-30 16:50:24