PHP preg_match非贪婪模式是什么?

30

我有一个字符串(来自文件):

ILX (New for 2013!)

Overview: The least expensive route to Honda's premium-label goodness

Drivetrain: Two four-cylinder engines to choose from as well as a gas-electric hybrid; front-wheel-drive only.

如何获取字符串:

$writeup = file_get_contents($car_files_path . $manufacture . '/Stories/'.$story);

我想匹配概述行 (Overview: The least expensive route to Honda's premium-label goodness)。怎样才能最好地实现这一点?

我尝试过 .*\n,但是会匹配到所有东西再加上一个新行。有没有办法让正则表达式不贪婪?

我尝试了:preg_match('/^Overview:\s.*$/im', $writeup, $overall_matches),但是没有匹配到任何结果。


6
非贪婪模式是.*?。详情请参考:http://www.regular-expressions.info/repeat.html。 - Michael Berkowski
我有点困惑你想匹配什么...只是包含单词“Overview”的整行,还是包括换行符?你实际使用的正则表达式是什么? - Explosion Pills
我正在尝试使用“概述”来匹配整行。 - Chris Muench
1个回答

48

在量词后添加?可以使其变为非贪婪模式。在这种情况下,你的正则表达式应该是.*?\n

要匹配以"Overview: "开头的行,请使用以下正则表达式:

/^Overview:\s.*$/im

m 修饰符允许 ^$ 匹配行的开头和结尾,而不是整个搜索字符串。请注意,无需使其非贪婪,因为 . 不会匹配换行符,除非使用 s 修饰符 - 实际上,在这里使其非贪婪会影响性能。


我忘记包含字符串的一部分。请查看更新。 - Chris Muench
它应该仍然可以正常工作。 - Niet the Dark Absol
我正在执行以下操作: $writeup = file_get_contents($car_files_path . $manufacture . '/Stories/'.$story); - Chris Muench
我觉得以某种方式使用file_get_contents会导致某些奇怪的行为。 - Chris Muench
也适用于加号( + )!( .+? - jave.web
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接