正则表达式报错‘Invalid range in {}’问题排查求助
正则表达式报错‘Invalid range in {}’问题排查求助
嘿,刚看到你的问题,作为正则新手碰到这种报错确实挺懵的,我来帮你找找问题所在~
你遇到的「Invalid range in '{}'」错误,根源出在你写的functionPattern正则里。咱们来拆解一下:
C++的std::regex默认用的是ECMAScript风格的正则语法,在这种语法里,{是个特殊字符——它是用来定义重复次数的量词开头(比如a{3}表示匹配3个连续的a)。而你的正则最后一段是\s*{,这里的{你是想匹配代码里的左大括号,但因为没转义,正则引擎会误以为你要写一个量词规则,可后面又没有对应的数字或范围,自然就报“无效范围”的错了。
解决方法很简单,把正则里的{转义成\{就行,因为你用了C++的raw string(R"(...)"),所以直接写\{就可以表示正则里的转义左大括号,不用额外处理反斜杠的转义问题。
修改后的functionPattern应该是这样的:
const regex functionPattern(R"((\w+)\s+(\w+)\s*\(([^)]*)\)\s*\{)");
另外我帮你检查了variablePattern,这个正则里的符号都是正常的,没有类似的问题,不用改。
你把代码里的正则改完再运行,应该就能解决这个报错啦~
备注:内容来源于stack exchange,提问作者sech1p
相关产品推荐
相关产品推荐

