Regex multiple matches (QRegularExpression)
Regex multiple matches (QRegularExpression)
这是我的字符串:"我喜欢正则表达式,但我并不真正理解正则表达式。该死的正则表达式!
我理解正则表达式的方式(肯定是错误的方式),如果我使用"i.*regex"捕获文本。对我来说,有 5 场比赛:
1 - "我爱正则表达式"
2 - "我喜欢正则表达式,但我并不真正了解正则表达式"
3 - "我喜欢正则表达式,但我并不真正了解正则表达式。该死的正则表达式"
4 - "我真的不明白正则表达式"
5 - "我真的不了解正则表达式。该死的正则表达式"
我不明白正则表达式文本扫描背后的算法。
这是我的C++/Qt代码:
QString str = "i love regex but i don't really understand regex. freaking regex!";
QRegularExpression re1("i.*regex");
qDebug()<<re1.match(str).captured(0); // OUT : "i love regex but i don't really understand regex. freaking regex"
QRegularExpression re2("i.{0,10}regex");
qDebug()<<re2.match(str).captured(0); // OUT : "i love regex"
所以在Qt或一般情况下,从"我爱正则表达式,但我并不真正理解正则表达式"中提取第一个匹配项("我爱正则表达式")是什么。该死的正则表达式!"??
提前致谢
正如评论中已经提到的,您使用的量词决定了您是获得最长的匹配还是最短的匹配。
*
基本上意味着"任意次数的出现,但尽可能多的仍然导致匹配"
*?
基本上意味着"任意次数的出现,但尽可能少地仍然导致匹配"
像*
和+
这样的量词默认是"贪婪的",这意味着它们尽可能匹配。如果您使用?
修改它们,它们将变得"懒惰"并表现出其他行为。
话虽如此,某些正则表达式实现可能不支持惰性量词,并且您可能必须在特定情况下使用其他方法。
默认匹配是贪婪的。要获得最短的匹配,请使用:
QRegExp::setMinimal(true);
这将撤销贪婪行为并返回最短的匹配项。请参阅:http://doc.qt.io/qt-5/qregexp.html
相关文章:
- 没有找到相关文章