5

我有问题boost::regex::regex_match。我使用打开的BOOST_REGEX_MATCH_EXTRA.


我有的:

(这是我的问题的一个简单示例,不是真正的任务)

string input1= "3 4 5";
string input2= "3 4 7";

我想得到什么:

list output1= [3 4 5];
list output2= []; //not matched

正则表达式:

(这工作正常)

((?<group>[0-6])[ ]?)*

输出1:what["group"]=5what["group"].captures()= [3, 4, 5]

输出2:not matched

问题是:

我需要从一组以上的正则表达式中收集数据。

我试过了:

((?<group>[0-6])[ ])*(?<group>[0-6])

输出1:what["group"]=4what["group"].captures()=[3, 4]

输出2:not matched

好的,我明白了。它没有看到第二次组声明。

我试过了:

((?<group>[0-6])[ ])*(?&group)

输出1:what["group"]=4what["group"].captures()= [3, 4, 4]

输出2:not matched

  • 但是这是什么?第二个4来自哪里?它检查“组”模式,因为第一个示例匹配,但第二个不匹配。但它使最后发现的价值翻了一番,而不是保存新的。为什么?也许我忘了打开一些标志?
  • 还有另一种方法可以从正则表达式的不同部分获取一组数据吗?

我有不止一组,所以 token_iterator 帮不了我。

并且表达式应该在配置文件中配置。不能使用静态 Xpressive。

4

1 回答 1

0

这就是我解释你的问题的方式:

细绳: Total price: $1,234

并且您想将成本捕获为1234(不带逗号)

仅使用正则表达式是不可能的,因为无法捕获组并排除中间的部分。话虽如此,您可以使用 2 个匹配组和前瞻,然后在内部代码将这些组缝合在一起。使用上面的示例,如果您不知道是否会有逗号(即价格范围为 1-5000),您可以执行类似的操作

Total price: \$(?P<price>\d{1,3})(?:(?=\,),(?P<price2>\d{3})|)

其中匹配 1-3 个数字,然后查找逗号,如果存在,则使用不同的名称组并匹配第二个块。

这是一个非常好的正则表达式测试资源:www.regex101.com

于 2013-12-18T00:20:15.167 回答