Просмотр полной версии : Помогите составить регулярное выражение
Немогу допереть как составить реулятрое выражение под данные таково формата:
$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
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]));
?>
<?php
preg_match_all('#(\$[a-z0-9]{1,}) ([a-z0-9\$]{1,})#', '$a data1 $g da$ta2 $y data3 $2 data4 $2 data5', $m);
foreach ($m[1] as $ky=>$va) $m[1][$ky] = substr($m[1][$ky],1);
print_r(array_combine($m[1],$m[2]));
?>
Он же сказал,что в $2 data4 невсегда встречаеться $.Незачод,думаем дальше.Тут нужно |
2 m0Hze
не вникал я там в его условия, голова щас не сильно варит .. он дал пример, я по нему и составил регулярку .. ну а вообще есть для регулярок тема https://forum.antichat.ru/thread92492.html !
$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
$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:
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 - может содежать еще и пробелы )
так что только у попугая нормально работает )
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot