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

标签 regex multiline ultraedit

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

(?s).*i

搜索文本包含多行,每行包含多个“i”字符。

我希望上面的正则表达式意味着:搜索尽可能多的字符(因为使用 '?s' . 现在匹配任何内容,包括换行符)(因为对 *) 的贪婪直到到达字符“i”。

这应该是指“从第一个字符到last sentence 的最后一个'i'”(贪心应该到最后一句,对吧?)。

但是用UltraEdit的测试,结果是“第一个包含i的句子中从第一个字符到最后一个'i'”。这个结果正确吗?我对 reg 表达式的解释有误吗?

例如给定这段文字

aaa
bbb
aiaiaiaiaa  
bbbicicid

aaa
bbb
aiaiaiai

匹配。但我希望:

aaa
bbb
aiaiaiaiaa  
bbbicici

最佳答案

您的正则表达式是正确的,您对其性能的期望也是如此。

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

还有一些其他带有行尾的细微错误。例如,lookbehind 也不适用于换行符。

写入 IDM 支持,或更改为具有良好正则表达式支持的编辑器。我都做了。

关于regex - 使用点匹配所有模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348332/

相关文章:

python - 为什么我的 python 正则表达式不起作用?

iphone - 有没有办法控制 iPhone 中 Quartz 绘制的多行文本的行高?

html - 如何在 UltraEdit 中将 CSS 链接到 HTML?

docker - Ultraedit docker 语法高亮文件

regex - 将文件中的每 n 个换行符替换为制表符

JavaScript - 从文本框中读取的值是否被转义?

java - 使用列表 Android Studio 从 HTMLData 获取 URL

excel - 从单元格中删除所有星号的宏

apache-flex - Spark.components.List 的多行 itemRenderer - 带有测试用例和屏幕截图

WPF 多行 TextBlock 中心对齐问题