2010-10-16 4 views
1

У меня есть шаблонЗахват повторяющиеся шаблоны регулярных выражений в PHP

ab 23 cde 25 ... and so on 

Могу ли я захватить выше рисунок как

array(
[patterns] => array(
    [0] => array(
    [payer] => 'ab' 
    [amt] => 23 
    ) 
    [1] => array(
    [payer] => 'cde' 
    [amt] => 25 
    ) 
) 
) 

Возможно ли это?

+0

Конечно, это возможно; php завершен! Или вы спрашиваете, как это сделать? – JoshD

ответ

0

Создайте регулярное выражение для соответствия каждому элементу массива (\w+\s+\d+). Соберите все (это должно дать вам куски, такие как ab 23).

Затем для каждого из этих элементов разделите пробелы и вставьте в свой большой массив как [плательщик], [amt].

+0

Я думаю, вы имели в виду '\ w + \ s + \ d +'. '\ w * \ s * \ d *' будет * всегда * соответствовать, потому что он может юридически соответствовать нулевым символам. –

+0

@Alan Moore: Спасибо :) – JoshD

2

Вы можете использовать preg_match_all для этого, как:

$str = 'ab 23 cde 25'; 
preg_match_all('/(\w+)\s+(\d+)/',$str,$matches); 
$result = array(); 
for($i=0;$i<count($matches[0]);$i++) { 
     $result[] = array('payer' => $matches[1][$i], 'amt' => $matches[2][$i]); 
} 

Working link

+0

Спасибо. preg_match_all. В любом случае этот повторяющийся шаблон является частью повторяющегося шаблона, поэтому я предполагаю, что в любом случае мне придется сначала получить этот повторяющийся шаблон, а затем запустить preg_match_all на нем. – AppleGrew

0
(?:'|.)(\w+)(?:'|$) 
+0

Пожалуйста, разверните свой ответ. –

Смежные вопросы