在崇高的文本中,我试图匹配单个双引号,后跟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
- 没有比赛
我是否需要提高正则表达式的效率,还是我完全错了?
您看到的错误很可能是因为涉及捕获组。将它转为非捕获组,如下所示:
^(?:(?!").)*"<br>.*$
但...
我试图匹配一个双引号......
如果你试图匹配一个双引号后紧跟<br>
并且之前没有另一个"
那么你可能需要看一下:
"(?<!"")(?=<br>)
以上是您的问题的快速解决方案。
尝试使用否定的字符类而不是调和的贪婪令牌/否定前瞻:
^[^"]*"<br>.*$
如果您不需要选择整行,则可以进一步简化正则表达式:[^"]"<br>
如果您需要完整的行并且以上操作不起作用,我建议您通过grep
运行该模式
grep -P '^[^"]*"<br>.*$'