我正在解析包含以下数据包的文件:
[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();
}
答案 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
以外的任何字符。同时使用+?
使其不贪婪,或者它会在"
的最后一个实例处停止在同一行