dsi*_*ign 1 regex boost-xpressive regex-negation
(或者我认为)......
我正在使用boost :: xpressive作为我的正则表达式引擎来解析一些东西,我得到一个段错误.我怀疑递归和我的坏正则表达式是罪魁祸首,因为gdb显示超过300个堆栈帧.所以,这是我的(区分大小写)正则表达式,用perl/python表示法:
begin([^e]+)e((?:[^b]|b(?!egin))+)
Run Code Online (Sandbox Code Playgroud)
我期望匹配
beginHEADER HEREeFOLLOWED BY SOME LONG LONG TEXT THAT GOES UNTIL NEXTbegin
Run Code Online (Sandbox Code Playgroud)
第一组中的第一个大写文本(HEADER HERE)和第二组中的第二个大写文本.如果与第2组匹配的文本很长,我总是得到段错误.
为什么不能这样做?
只需使用非贪婪匹配,您就可以简化正则表达式:
begin(.+?)e(.+?)begin
Run Code Online (Sandbox Code Playgroud)
试试看,看看它是否更好.
由于正则表达式中的|-or分组的递归实现,原始正则表达式可能导致堆栈溢出,这可能与第二组中的每个字符分支.
.+?另一方面,简单的非贪婪不需要为每个单个字符分支.
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |