2013-02-19 4 views
17

У меня есть строка (из файла):php preg_match не жадный?

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) Что является лучшим способом для достижения этой цели .

Я пытался. * \ п, но это будет соответствовать все, а затем новая линия. есть ли способ, чтобы сделать регулярное выражение не жадный?

I га ve пытались: preg_match('/^Overview:\s.*$/im', $writeup, $overall_matches) и не попала в статистику

+3

Non-greedy is '. *?' Http://www.regular-expressions.info/repeat.html –

+0

Я немного смущен тем, что вы пытаетесь сопоставить .. только вся строка с слово 'Обзор' в нем, новая строка? Каково ваше текущее регулярное выражение? –

+0

Я пытаюсь сопоставить всю строку с Обзор: –

ответ

30

Добавить ? после квантификатора, чтобы сделать его неровным. В этом случае ваше регулярное выражение будет .*?\n.

Чтобы конкретно соответствовать строку, начинающуюся с «Обзор:» использовать это регулярное выражение:

/^Overview:\s.*$/im 

Модификатор m позволяет ^ и $, чтобы соответствовать начало и конец строки, а не всей строки поиска. Обратите внимание, что нет необходимости делать его неразборчивым, так как . не соответствует новым строкам, если вы не используете модификатор s - на самом деле, что делает его неровным здесь, было бы плохо для производительности.

+0

Я забыл включить часть строки. См. Обновление –

+0

Он должен все еще работать нормально. –

+0

У меня до сих пор нет матчей. См. Обновление выше –