如何QRegExp" [propertyID ="任何"]"?

时间:2015-08-19 11:45:09

标签: regex qt qt5 qt5.4 qregexp

我正在解析包含以下数据包的文件:

[propertyID="123000"] { 
  fillColor : #f3f1ed;
  minSize : 5;
  lineWidth : 3;
}

要扫描这个[propertyID="123000"]片段我有这个QRegExp

QRegExp("^\b\[propertyID=\"c+\"\]\b");

但这不起作用?这里我有解析上面文件的示例代码:

QRegExp propertyIDExp= QRegExp("\\[propertyID=\".*\"]");
propertyIDExp.setMinimal(true);

QFile inputFile(fileName);
if (inputFile.open(QIODevice::ReadOnly))
{
    QTextStream in(&inputFile);
    while (!in.atEnd())
    {
        QString line = in.readLine();

        // if does not catch if line is for instance
        // [propertyID="123000"] {
        if( line.contains(propertyIDExp) )
        {
            //.. further processing
        }
    }
    inputFile.close();
}

2 个答案:

答案 0 :(得分:0)

使用以下表达式:

QRegExp("\\[propertyID=\"\\d+\"]");

请参阅regex demo

在Qt正则表达式中,您需要使用双反斜杠转义正则表达式特殊字符,并且要匹配数字,您可以使用简写类\d。此外,\b字边界阻止了您的正则表达式匹配,因为它不能匹配字符串start和[之间以及]和空格之间(或使用\B)。< / p>

要匹配引号之间的任何内容,请使用否定的字符类:

QRegExp("\\[propertyID=\"[^\"]*\"]");

请参阅another demo

作为替代方案,您可以在.*QRegExp::setMinimal()的帮助下使用延迟点匹配:

QRegExp rx("\\[propertyID=\".*\"]");
rx.setMinimal(true);

在Qt中,.匹配任何字符,包括换行符,因此请注意此选项。

答案 1 :(得分:0)

QRegExp("\\[propertyID=\".+?\"\\]")

您可以使用.。它会匹配除newline以外的任何字符。同时使用+?使其不贪婪,或者它会在"的最后一个实例处停止在同一行