这是我的字符串:“我爱regex,但我不太懂reex.该死的regex!”
如果我用"i.* regex“捕获文本,我理解regex的方式(肯定是错误的)。对我来说,有5场比赛:
1-“我爱regex”
2-“我爱regex,但我不太懂regex”
3-“我爱regex,但我不太懂reex.MD regex”
4-“我不太懂regex”
5-“我真的不懂正则表达式。该死的正则表达式”
我不明白regex文本扫描背后的高度。
这里我的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或一般情况下,从“我爱regex但我并不真正理解regex.该死的regex!”中提取第一个匹配(“我爱regex")的表达式是什么?
提前感谢
发布于 2015-04-16 09:54:56
正如注释中已经提到的,是您使用的量词决定了您将得到最长的可能匹配还是最短的可能匹配。
*基本上意味着“任何数量的事件,但尽可能多的结果仍然是匹配的”。
*?基本上意味着“任何数量的事件,但尽可能少的结果仍然是匹配的”。
像*和+这样的量词在默认情况下是“贪婪的”,这意味着它们尽可能匹配。如果用?修改它们,它们就会变得“懒惰”,并表现出其他的行为。
尽管如此,有些regex实现可能不支持惰性量词,在特定情况下可能需要使用其他方法。
发布于 2015-04-16 09:58:55
默认匹配是贪婪的。要获得最短的匹配,请使用:
QRegExp::setMinimal(true);这将撤销贪婪行为,并返回最短的匹配。请参阅:http://doc.qt.io/qt-5/qregexp.html
https://stackoverflow.com/questions/29671004
复制相似问题