【问题标题】:Qregexp quantifier captureQregexp 量词捕获
【发布时间】:2016-10-18 19:19:32
【问题描述】:

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

ma(v,c)。

用这个正则表达式

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

在这种情况下,它给了我

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

但是当我尝试这个序言时

ma(v,c,r)。

它只给我

“ma” “(” “c” “” “r” “)” “。”

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

【问题讨论】:

  • 对你来说最好的方法是将()中的所有文本与\\([^()]*\\)匹配,然后修剪()并用,分割内容

标签: c++ regex qt qregexp


【解决方案1】:

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

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

我的建议是将其分为三个操作。一个用于解析整个结构,另一个用于使用 "," 拆分此 v、c、r,另一个用于将所有内容放在一起:

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

操作 2 - 使用 , 拆分 group(3) 处的字符串以获取每个元素。

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

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多