Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用点匹配所有模式的正则表达式_Regex_Multiline_Ultraedit - Fatal编程技术网

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

Regex 使用点匹配所有模式的正则表达式,regex,multiline,ultraedit,Regex,Multiline,Ultraedit,通常情况下,不匹配换行符,除非我使用(?s)标志指定引擎来匹配换行符。我在编辑器(UltraEdit v14.10)的regexp引擎上使用Perl风格的regexp模式尝试了这个regexp: (?s).*i 搜索文本包含多行,每行包含许多“i”字符 我希望上面的regexp意味着:搜索尽可能多的字符(因为使用“”s”现在匹配任何字符,包括换行符)(因为对*)的贪婪),直到到达字符“I” 这应该意味着“从第一个字符到最后一句话中的最后一个‘我’”(贪婪应该达到最后一句,对吧?) 但在Ultr

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

(?s).*i
搜索文本包含多行,每行包含许多“i”字符

我希望上面的regexp意味着:搜索尽可能多的字符(因为使用“”s现在匹配任何字符,包括换行符)(因为对*)的贪婪),直到到达字符“I”

这应该意味着“从第一个字符到最后一句话中的最后一个‘我’”(贪婪应该达到最后一句,对吧?)

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

e、 g.鉴于本文

aaa
bbb
aiaiaiaiaa  
bbbicicid
是的

aaa
bbb
aiaiaiai
匹配。但我希望:

aaa
bbb
aiaiaiaiaa  
bbbicici

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

这是UltraEdit的正则表达式实现中的一个众所周知的bug,我已经多次编写该实现来支持它。据我所知,它还没有修好。问题似乎在于UE的regex实现基本上是基于行的,并且只有在必要时才会在匹配中加入额外的行。因此,
*
将在当前行上进行贪婪的匹配,但如果不需要通过换行边界来实现匹配,则不会跨越换行边界

还有其他一些带有行尾的细微缺陷。例如,lookback也不能跨换行符工作


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

是的,你是对的,这看起来像个bug

你的解释是正确的。如果您处于Perl模式而不是Posix。 但是,它也应该适用于posix

尽管像您这样定义修饰符是非常罕见的

大多数情况下,您会提供一个带有分隔符的字符串,以及后面的修饰符,如
/.*i/s

但这并不重要,因为你的方式也是正确的。如果它不被支持,它也不会匹配第一个换行符


是的,这肯定是程序中的一个bug。

您认为正则表达式应该匹配整个字符串(全部4行)是正确的。我的猜测是UltraEdit试图通过逐行工作来进行某种优化,并且只在“必要时”积累新的行。

如果这不是一个bug,我猜这就是他们将行为更改为这种方式的原因。也许,对于一个文本编辑器来说,贪婪地搜索整个文件会产生太糟糕的性能。我不知道你提到的lookback bug。但是,贪婪地搜索整个输入文件会不会太慢,以至于他们决定以这种方式改变行为?请记住,UltraEdit允许编辑大小为MBs的输入文件。EditPadPro处理大小为GBs的文件,并且没有这些正则表达式限制。如果我构造一个贪婪的正则表达式,我希望它能正常工作。如果这意味着内存不足,那么这是我或操作系统的问题,但编辑不应该猜测我。