多行正则表达式无法按预期工作

Posted

技术标签:

【中文标题】多行正则表达式无法按预期工作【英文标题】:Regex with multiline not working as expected 【发布时间】:2012-07-12 12:36:59 【问题描述】:

我在 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+.+?\(.*?\)

完全符合我的需要,但有一个问题,那就是 notepad++ 不会为所有标记的行添加书签,而只是查找的开始;如果它是多行查找,它只会为匹配的第一行添加书签(尽管其余行将被标记)。因此,这意味着如果您使用“在文件中查找”进行搜索,它只会返回不那么有用的带有书签的行。

但是,您可以通过 Search-->Remove Unbookmarked Lines 删除所有未标记的行,但我需要进行批量搜索,所以这似乎是不可能的。

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

【问题讨论】:

【参考方案1】:

不确定我是否理解您的期望,buf 这样的事情怎么样:

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

【讨论】:

对不起,我需要全部匹配,单行和多行。 上面的正则表达式匹配单行和多行【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于多行正则表达式无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式无法与 C++ regex_match 一起按预期工作

使用 Vim 的正则表达式替换多个文件的单词在 sed 中无法按预期工作

PostgreSQL中的正则表达式无法按预期工作

C++ 11 正则表达式未按预期返回组

为啥这个正则表达式模式不能按预期工作?

NSpredicate 上的正则表达式未按预期工作