Qregexp量词捕获

时间:2016-10-18 19:19:33

标签: c++ regex qt qregexp

这是我的问题 我在QT库中使用QRegexp来捕获这样的prolog表达式

  

毫安(V,C)。

使用这个正则表达式

([a-z][A-Za-z0-9]*)(\\()([A-Za-z0-9]*,)*([A-Za-z0-9]*)(\\))(\\.)

在这种情况下,它给了我

"ma"   "("   "v"  ","   "c"   ")"    "." 

但是当我尝试这个序言时

  

毫安(V,C,R)。

它只给了我

"ma"   "("   "c"  ","   "r"   ")"    "." 

有没有办法捕捉所有量词?

1 个答案:

答案 0 :(得分:0)

在Regex中,组由用户定义,而不是由要解析的表达式定义。我的意思是,根据要分析的数据,组的数量不会增加或减少。

当您添加([A-Za-z0-9]*,)*时,它并不意味着正则表达式将返回零个或多个与此模式匹配的组[A-Za-z0-9]*,

我的建议是把它分成三个操作。一个用于解析整个结构,另一个用于分析此v,c,r,使用","和一个把所有东西都放在一边:

操作1 - 使用此正则表达式:([a-z][A-Za-z0-9]*)(\\()((?:[A-Za-z0-9]*,?)*)(\\))(\\.)

操作2 - 使用,将字符串(3)拆分为每个元素。

操作3 - 连接:组(1)+组(2)+ result_of_operation_2 +组(4)+组(5)