我正在构建大型正则表达式查询,并且不希望正则表达式在空白不匹配时失败。适用于我的应用程序的一个例子是我想要一个匹配以下两者的正则表达式:
"int a;"
"int a;"
我可以使用int\s+a;
来匹配这两个,但是谁想要阅读100行呢!
所以我进行了快速搜索并发现free spacing mode
(http://www.regular-expressions.info/freespacing.html)似乎使int a;
与上述两者相匹配。大!如何使用标准的regex
库在C ++中使用它?
Boost也是可以接受的,但是首选的是解决方案。
答案 0 :(得分:3)
std regex库基于POSIX正则表达式语法。根据你的链接,这是一个不支持自由间隔模式的链接。
"在本教程中讨论的风格中,只有XML Schema和POSIX和GNU风格不支持它"
我相信你应该使用\ s +。如果要生成静态表达式,我的建议是使用boost :: xpressive。
请记住,阅读复杂的正则表达式是一项需要大量练习的技能。如果你认为\ s +是个问题...只是等一下。
答案 1 :(得分:1)
free spacing mode
导致正则表达式中的空格被忽略。它对你想要匹配的实际字符串没有任何作用。
减少空格正则表达式详细程度的一个选项是,您可以执行一次传递,将所有多个空格序列转换为单个空格,然后每次只能执行int a;
。