Regex multiple matches (QRegularExpression)

Regex multiple matches (QRegularExpression)

本文关键字:QRegularExpression matches multiple Regex      更新时间:2023-10-16

这是我的字符串:"我喜欢正则表达式,但我并不真正理解正则表达式。该死的正则表达式!

我理解正则表达式的方式(肯定是错误的方式),如果我使用"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

相关文章:
  • 没有找到相关文章