使用点匹配 - 所有模式的正则表达式

Jav*_*Man 2 regex multiline ultraedit

通常是.除非我使用(?s)标志指定引擎,否则不匹配换行符.我使用Perl样式的regexp模式在我的编辑器(UltraEdit v14.10)regexp引擎上尝试了这个regexp:

(?s).*i
Run Code Online (Sandbox Code Playgroud)

搜索文本包含多行,每行包含许多"i"字符.

我希望上述正则表达式方式:搜索尽可能多的字符(因为与" S' "了.现在任何匹配包括换行符)越好(因为贪婪的*的),直至到达字符"I".

这应该意味着"从最后一句中的第一个字符到最后一个字母"(贪婪应该到达最后一句,对吗?).

但是根据UltraEdit的测试,结果是"从包含i的第一个句子中的第一个字符到最后一个'i'".这个结果是否正确?我对我的reg表达式做出了错误的解释吗?

例如,给出这个文本

aaa
bbb
aiaiaiaiaa  
bbbicicid
Run Code Online (Sandbox Code Playgroud)

它是

aaa
bbb
aiaiaiai
Run Code Online (Sandbox Code Playgroud)

匹配.但我希望:

aaa
bbb
aiaiaiaiaa  
bbbicici
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 5

你的正则表达式是正确的,你对它的表现的期望也是如此.

这是UltraEdit的正则表达式实现中一个众所周知的错误,我已经多次写这篇文章来支持.据我所知,它仍然没有修复.问题似乎在于UE的正则表达式实现基本上是基于行的,并且仅在必要时才将其他行引入匹配.因此,.*将在当前行上贪婪地匹配,但如果不必为了实现匹配,它将不会越过换行边界.

还有一些其他微妙的错误与行结尾.例如,lookbehind也不适用于新行.

写入IDM支持,或更改为具有正常的正则表达式支持的编辑器.我做了两件事.