这是我的问题 我在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" ")" "."
有没有办法捕捉所有量词?
答案 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)