在Sublime Text中使用正则表达式会导致堆栈空间用完

问题描述 投票:1回答:2

在崇高的文本中,我试图匹配单个双引号,后跟html标签<br>。任何字符串都可以在html标记之后,双引号之前不能有双引号。

https://regex101.com/r/HHNB1E/4测试时,我已经达到了我的正则表达式满足我的期望。

这是我的正则表达:^((?!").)*{"<br>}.*$

但是,当我把它放入Sublime Text时,它会抛出错误“Ran out of stack space try the match the regular expression”。我认为我的正则表达式是低效的,因为我对它们不是很有经验。

预期的示例结果:

foobar""<br> - 不匹配

foobar"<br> - 比赛

""<br>baz - 不匹配

"<br>baz - 比赛

foo<br>baz - 没有比赛

我是否需要提高正则表达式的效率,还是我完全错了?

regex sublimetext3
2个回答
1
投票

您看到的错误很可能是因为涉及捕获组。将它转为非捕获组,如下所示:

^(?:(?!").)*"<br>.*$

但...

我试图匹配一个双引号......

如果你试图匹配一个双引号后紧跟<br>并且之前没有另一个"那么你可能需要看一下:

"(?<!"")(?=<br>)

以上是您的问题的快速解决方案。


2
投票

尝试使用否定的字符类而不是调和的贪婪令牌/否定前瞻:

^[^"]*"<br>.*$

Demo

如果您不需要选择整行,则可以进一步简化正则表达式:[^"]"<br>

如果您需要完整的行并且以上操作不起作用,我建议您通过grep运行该模式

grep -P '^[^"]*"<br>.*$'
© www.soinside.com 2019 - 2024. All rights reserved.