2015-04-16 185 views
1

这里是我的字符串:“我喜欢正则表达式,但我真的不明白正则表达式。吓坏正则表达式!”正则表达式多个匹配(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或是在一般情况下,什么是提取自“我爱正则表达式,但我不”的第一场比赛(“我爱正则表达式”)的表达真的了解正则表达式。吓坏正则表达式!“??提前

+1

为什么你需要提取你已经知道的东西?正则表达式用于提取某些图案化字符串中您不知道的东西。匹配“我爱正则表达式”的标准是什么?一个以“i”开始并以“regex”结尾的字符串?然后,它是'我* *正则表达式'。在Qt中为 –

+0

:''QRegExp :: setMinimal(true)'' –

回答

1

由于作为已经在评论中提到,这是你使用决定了你是否会得到最长的可能匹配或可能的最短匹配的量词。

*基本上意味着“任何数量的发生,但尽可能多的仍然导致比赛”

*?基本上意味着“任何数量的发生,但仍造成了比赛尽可能少的”

量词如*+默认为“贪婪”,意味着它们尽可能匹配。如果你用?修改他们,他们会变得“懒惰”,并表现出其他行为。

这就是说,一些正则表达式的实现可能不支持懒惰的量词,并且可能你必须在你的特定情况下使用其他方法。

+1

非常感谢! – NiHoT

0

默认匹配是贪婪的。要获得最短匹配使用:

QRegExp::setMinimal(true); 

这将撤销贪婪行为并返回最短匹配。见:http://doc.qt.io/qt-5/qregexp.html

+0

谢谢,这种方法适用于QRegExp,但QregualrExpression使用*?很好 – NiHoT