Немогу допереть как составить реулятрое выражение под данные таково формата: $x data1 $x data2 ..... $x dataN где x - это символы a-z 0-9 строка может содержать переменное кол-во повторов блока $x data При этом мне необходимо выбрать все x и data При этом в тексте может встречаться $, по этому парсится должны только в тех местах где $ находится в начале строки или перед ним пробел и в после него - один символ a-z 0-9 а далее пробел. Пример строки: $a data1 $g da$ta2 $y data3 $2 data4 $2 data5 на выходе я должен получить массив: a data1 g da$ta2 y data3 2 data4 2 data5 P.S. Для PHP
PHP: <?php preg_match_all('#\$([a-z0-9]{1,}) ([a-z0-9\$]{1,})#', '$a data1 $g da$ta2 $y data3 $2 data4 $2 data5', $m); print_r(array_combine($m[1],$m[2])); ?>
2 m0Hze не вникал я там в его условия, голова щас не сильно варит .. он дал пример, я по нему и составил регулярку .. ну а вообще есть для регулярок тема /thread92492.html !
PHP: $fp = '$a data1 $g da$ta2 $y data3 $2 data4 $2 data5'; $x = explode(' $', $fp); foreach($x as $y){ $data .= $y . ':'; } $data = explode(':', substr($data, 1)); foreach($data as $z){ echo $z . PHP_EOL; } Громоздко( и не регулярка
Один ассоциативный массив тут не получится заюзать, т. к., судя по примеру, ключи могут повторяться. Тут, наверно, следует использовать два обычных массива - в одном ключи, в другом - значения. Как-то так PHP: <?php $str = '$a data1 $g da$ta2 $y data3 $2 data4 $2 data5' . "\n"; $str .= '$b data_b $e data$2e $y d$at$a3 $7 da7ta $2 data$2' . "\n"; preg_match_all ('/\$([a-z0-9]) (.+?)(\s|\n)/', $str, $m); //print_r ($m); $key = $m[1]; $val = $m[2]; print_r ($key); print_r ($val); ?> Тут условие, что строка должна завершаться символом \n: Code: Array ( [0] => a [1] => g [2] => y [3] => 2 [4] => 2 [5] => b [6] => e [7] => y [8] => 7 [9] => 2 ) Array ( [0] => data1 [1] => da$ta2 [2] => data3 [3] => data4 [4] => data5 [5] => data_b [6] => data$2e [7] => d$at$a3 [8] => da7ta [9] => data$2 )
совершенно забыл указать что data - может содежать еще и пробелы ) так что только у попугая нормально работает )