Reputation: 103
(?i)time.?([0-9:]+) - this pattern find all texts - time=00:00:00.00
How i can get last matched element(time=00:05:01.84) in first or second text
First text:
Metadata:
creation_time : 2013-11-21 11:03:11
handler_name : IsoMedia File Produced by Google, 5-11-2011
Output #0, mp3, to 'ssdad.mp3':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
TSSE : Lavf54.63.104
Stream #0:0(und): Audio: mp3, 44100 Hz, stereo, fltp
Metadata:
creation_time : 2013-11-21 11:03:11
handler_name : IsoMedia File Produced by Google, 5-11-2011
Stream mapping:
Stream #0:1 -> #0:0 (aac -> libmp3lame)
Press [q] to stop, [?] for help
size= 3779kB time=00:03:01.84 bitrate= 128.0kbits/s
size= 3779kB time=00:04:01.84 bitrate= 128.0kbits/s
size= 3779kB time=00:05:01.84 bitrate= 128.0kbits/s
video:0kB audio:3779kB subtitle:0 global headers:0kB muxing overhead 0.008011%
Second text:
Metadata:
creation_time : 2013-11-21 11:03:11
handler_name : IsoMedia File Produced by Google, 5-11-2011
Output #0, mp3, to 'ssdad.mp3':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
TSSE : Lavf54.63.104
Stream #0:0(und): Audio: mp3, 44100 Hz, stereo, fltp
Metadata:
creation_time : 2013-11-21 11:03:11
handler_name : IsoMedia File Produced by Google, 5-11-2011
Stream mapping:
Stream #0:1 -> #0:0 (aac -> libmp3lame)
Press [q] to stop, [?] for help
size= 3779kB time=00:05:01.84 bitrate= 128.0kbits/s
video:0kB audio:3779kB subtitle:0 global headers:0kB muxing overhead 0.008011%
Upvotes: 0
Views: 476
Reputation: 3369
To get the last matched element with QRegularExpression
, you can use global match to obtain a QRegularExpressionMatchIterator
and iterate it to the last element:
QString getLastTime(const QString &input)
{
auto re = QRegularExpression { R"((?i)time.?([0-9:]+))" };
auto matchIterator = re.globalMatch(input);
while(matchIterator.hasNext())
{
auto result = matchIterator.next();
if (!matchIterator.hasNext())
{
return result.captured(0);
}
}
return QString{};
}
Alternatively, you can use QString::lastIndexOf
with a QRegularExpression
to get the last match:
QString getLastTime2(const QString &input)
{
auto match = QRegularExpressionMatch{};
input.lastIndexOf(QRegularExpression { R"((?i)time.?([0-9:]+))" }, -1, &match);
return match.captured(0);
}
Upvotes: 1