2013-08-03 3 views
0

Мне нужно совместить все строки, начинающиеся с регулярного выражения. Пример ввода.регулярное выражение для каждой строки

#X0 alpha numeric content that I want 
#X1 something else 
#X26 this one as well 

Оба эти регулярных выражения работают, но для первой строки. Мне нужно сопоставить все строки #X \ d {1,2}.

 /^(\#X\d{1,2}\s+)(.*?)$/m 
    /^(\#X\d{1,2}\s+)(.+)*$/m 

Что я получаю с любым из регулярных выражений выше.

$pattern= "/^(\#X\d{1,2}\s+)(.+)*$/m"; 
    preg_match($pattern, $content, $match); 
    echo $match[1]; 
    alpha numeric content that I want 

Желаемый результат.

alpha numeric content that I want 
    something else 
    this one as well 
+0

Извините, но непонятно, что вы просите. Не могли бы вы уточнить? Кроме того, неясно, почему второе регулярное выражение имеет значение, поскольку оно включает строки, начинающиеся с «#O», которых нет в ваших примерах. –

ответ

2

preg_match_all Использование с PREG_SET_ORDER флагом. Например:

$text = <<<EOT 
#X0 alpha numeric content that I want 
#X1 something else 
#X26 this one as well 
EOT; 

preg_match_all('/^(\#X\d{1,2}\s+)(.*)/m', $text, $matches, PREG_SET_ORDER); 
foreach ($matches as $match) { 
    echo $match[0] . "\n"; 
} 

UPDATE

соответствующего редактируемого вопроса.

preg_match_all('/^(\#X\d{1,2}\s+)(.*)/m', $text, $matches, PREG_SET_ORDER); 
foreach ($matches as $match) { 
    echo $match[2] . "\n"; 
} 
+0

Лучше использовать '. *', Чем '. *?' Для последнего подшаблона, потому что '$' не входит в значение '.'. –

+0

@ Kolink, Спасибо за совет. Я обновил код. Я также удаляю '$'. – falsetru

+0

Это сработало. для меня. – mirk