Dar*_*ida 5 c++ regex boost boost-regex regex-group
我有问题boost::regex::regex_match.我打开工作BOOST_REGEX_MATCH_EXTRA.
是)我有的:
(这是我的问题的一个简单例子,而不是一个真正的任务)
string input1= "3 4 5";
string input2= "3 4 7";
Run Code Online (Sandbox Code Playgroud)
我想得到什么:
list output1= [3 4 5];
list output2= []; //not matched
Run Code Online (Sandbox Code Playgroud)
正则表达式:
(这工作正常)
((?<group>[0-6])[ ]?)*
Run Code Online (Sandbox Code Playgroud)
output1:what["group"]=5和what["group"].captures()= [3, 4, 5]
输出2: not matched
问题是:
我需要从正则表达式的多个部分收集数据到一个组.
我试过了:
((?<group>[0-6])[ ])*(?<group>[0-6])
Run Code Online (Sandbox Code Playgroud)
output1:what["group"]=4和what["group"].captures()=[3, 4]
输出2: not matched
好的,我明白了.它没有看到第二组声明.
我试过了:
((?<group>[0-6])[ ])*(?&group)
Run Code Online (Sandbox Code Playgroud)
output1:what["group"]=4和what["group"].captures()= [3, 4, 4]
输出2: not matched
我有一个以上的组,所以token_iterator无法帮助我.
表达式应该在配置文件中配置.静态Xpressive不能使用.
这就是我对你的问题的解释:
细绳:
Total price: $1,234
并且您希望将成本捕获为1234(不带逗号)
仅使用正则表达式这是不可能的,因为无法捕获组并排除中间的部分。话虽这么说,您可以使用 2 个匹配组和前瞻,然后在代码内部将这些组缝合在一起。使用上面的示例,如果您不知道是否会有逗号(即价格范围从 1-5000),您可以执行以下操作
Total price: \$(?P<price>\d{1,3})(?:(?=\,),(?P<price2>\d{3})|)
其中匹配 1-3 位数字,然后查找逗号,如果存在,则使用不同的名称组并匹配第二个块。
这是一个非常好的正则表达式测试资源:www.regex101.com
| 归档时间: |
|
| 查看次数: |
1913 次 |
| 最近记录: |