当前位置: 首页 > 知识库问答 >
问题:

使用QRegularExpression将嵌套捕获组与量词匹配

冀望
2023-03-14

我试图通过QRegularExpression获取不同捕获组中xml标记的所有属性。我使用与标记匹配的正则表达式,并设法获得包含属性值的捕获组,但使用量词,我只获得最后一个。

我用这个正则表达式:

<[a-z]+(?: [a-z]+=("[^"]*"))*>

我想通过这段文字得到“a”和“b”:

<p a="a" b="b">

以下是代码:

const QString text { "<p a=\"a\" b=\"b\">" };
const QRegularExpression pattern { "<[a-z]+(?: [a-z]+=(\"[^\"]*\"))*>" };

QRegularExpressionMatchIterator it = pattern.globalMatch(text);
while (it.hasNext())
{
    const QRegularExpressionMatch match = it.next();

    qDebug() << "Match with" << match.lastCapturedIndex() + 1 << "captured groups";
    for (int i { 0 }; i <= match.lastCapturedIndex(); ++i)
        qDebug() << match.captured(i);
}

和输出:

Match with 2 captured groups
"<p a=\"a\" b=\"b\">"
"\"b\""

是否可以使用量词*获取多个捕获组,或者让我使用Q正则表达式匹配迭代器在字符串文字上使用特定的正则表达式进行迭代?

共有1个答案

邵飞白
2023-03-14

此表达式可能有助于您简单地捕获这些属性,并且它不受左右限制:

([A-z]+)(=\x22)([A-z]+)(\x22)

此图显示了表达式的工作原理,如果您想知道,您可以在此链接中可视化其他表达式:

如果您想为它添加额外的边界,您可能希望这样做,您可以进一步扩展它,可能类似于:

(?:^<p )?([A-z]+)(=\x22)([A-z]+)(\x22)
const regex = /(?:^<p )?([A-z]+)(=\x22)([A-z]+)(\x22)/gm;
const str = `<p attributeA="foo" attributeB="bar" attributeC="baz" attributeD="qux"></p>`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
 类似资料:
  • 我有一个这样的目标字符串:(然而嵌套在实践中可能非常深) 预期结果将是: 小组: 我在c#regex中找不到任何东西可以这样做嵌套捕获。有可能吗? 编辑: 我想我把我的例子简化得太多了,这使答案模糊不清。我需要以递归的方式捕获,因为我需要括号内的内容: 预期结果将是: 和

  • 目前我有这个阵列= 条件: 如果每个嵌套数组index2都相同,那么我想用[0.0 1.0,1.0 2.0,2.0 3.0,3.0 4.0] = [1.0,3.0,5.0,7.0]来求和 我想要的最终结果:[[“efg”, [1.0, 3.0, 5.0, 7.0], “测试”]] 有什么方法或建议来获得这个结果吗?

  • 我有一些数组,如果它们包含类似的值,我想返回这些数组的名称。 我有我的变量,它有多个数组,名字要么是,要么是,要么是。包含的只是变量中某些数组中相同的值。我需要返回数组中包含、和的数组的名称。因此,对于这个示例,我需要返回:。 通过这个函数抛出它们时,我得到一个错误。如何获取返回的数组?

  • 该示例摘自Elasticsearch参考:https://www.elastic.co/guide/en/Elasticsearch/reference/5.3/nested.html 我的索引和这个差不多。唯一的区别是user.first和user.last是关键字类型,所以我可以对它们使用过滤器。 在两种情况下,我应该使用什么查询来获取与上面数组匹配的文档(正好是两个项,一个项是John Sm

  • 问题内容: 我有一个嵌套的数组,我想在其中显示结果的子集。例如,在下面的数组中,我想遍历嵌套array [1]中的所有值。 我试图使用foreach函数,但似乎无法正常工作。这是我的原始语法(尽管我意识到这是错误的)。 我试图避免对键是否与我要搜索的键相同的变量进行比较,即 有任何想法吗? 问题答案: 如果您知道嵌套数组中的级别数,则可以简单地执行嵌套循环。像这样: 如果您不知道数组的深度,则需要

  • 问题内容: 我刚刚升级到Elastic Search 1.5.0,到目前为止,尽管嵌套查询可以正常工作,但我无法使inner_hits与嵌套过滤器一起使用。 比方说,我要检索的内部嵌套对象 演员 一中 的电影 对象。 当我运行以下 嵌套查询时 : 语法1 =>我得到了这里记录的inner_hits ,这很好。 但是当我尝试使用 嵌套过滤器 进行等效查询时: 语法2 =>我得到以下解析错误 Quer