在 Sublime Text 中使用正则表达式会导致堆栈空间不足错误

Chr*_*ell 3 regex sublimetext3

在 sublime text 中,我试图匹配一个引号,后跟 html tag <br>。任何字符串都可以出现在 html 标记之后,并且双引号前面不能有双引号。

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

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

但是,当我将其放入 Sublime Text 中时,它会抛出错误“尝试匹配正则表达式时堆栈空间不足”。鉴于我对正则表达式的经验不是很丰富,我假设我的正则表达式效率很低。

预期结果示例:

foobar""<br>- 没有匹配

foobar"<br>- 匹配

""<br>baz- 没有匹配

"<br>baz- 匹配

foo<br>baz- 没有匹配

我是否需要改进正则表达式以提高效率,或者我做得完全错误吗?

rev*_*evo 5

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

^(?:(?!").)*"<br>.*$
Run Code Online (Sandbox Code Playgroud)

但...

我正在尝试匹配一个双引号......

如果您尝试匹配一个双引号,该双引号紧随其后<br>且前面没有另一个双引号",那么您很可能需要环视:

"(?<!"")(?=<br>)
Run Code Online (Sandbox Code Playgroud)

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

  • 我使用了 `"(?&lt;!"")(?=&lt;br&gt;)` 并且它实现了我的目标。事实证明我对正则表达式了解不够,不知道另一个答案(和我的尝试)会返回整行。都赞成,因为它们都成功搜索而没有错误。感谢您花时间真正了解我试图解决的问题:D (2认同)