多行的正则表达式没有按预期工作

时间:2012-07-12 12:37:00

标签: regex

我在Notepad ++中使用Regex试图匹配如下的一般模式:

/*
<FooBar>(<--find open bracket and end on finding a closing bracket-->) 

 <FooBar> (foo 
bar);  
  <FooBar>  (foo 
bar 
baz)  
*/

我正在尝试匹配使用:

 ^\s*?<FooBar>\s+?.+?\(.*?\)

启用了“匹配换行符”,但它没有按预期工作;书签行显示在空白行上方,并且无法为我需要的所有行添加书签。

我想使用此正则表达式使用“在文件中查找”在多个文件中搜索匹配项。

所以我找到了一些东西。因为它使用多行,所以\ s *在到达foobar之前会匹配。因此,通过替换

删除所有后线
^\s+

没有解决这个问题。

^\s*<foobar>\s+.+?\(.*?\)

完全符合我的需要,但有一个问题,那就是记事本++没有标记所有标记的行,只是查找的开头;如果它是一个多行发现它将只匹配匹配的第一行(尽管其余的将被标记)。所以这意味着如果你使用“在文件中查找”进行搜索,它将只返回没有用的书签行。

但是,您可以通过搜索 - &gt;删除未注册的行来删除所有未标记的行,但我需要进行批量搜索,因此这似乎是不可能的。

但是,其他编辑器会返回所有标记的行,例如editpad pro。

3 个答案:

答案 0 :(得分:1)

不确定我是否理解你的期望,请问这样的事情:

^\s*<FooBar>\s*\((\n|.)*\)

答案 1 :(得分:0)

如果您专门寻找Notepad ++多线正则表达式,请查看this post

答案 2 :(得分:0)

Notepad ++不能正确支持跨越多行的正则表达式。我找到了解决方法:https://stackoverflow.com/a/4473041/785745