Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Помогите составить регулярное выражение (https://forum.antichat.xyz/showthread.php?t=123251)

slesh 02.06.2009 13:19

Помогите составить регулярное выражение
 
Немогу допереть как составить реулятрое выражение под данные таково формата:

$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

159932 02.06.2009 13:30

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]));
?>


m0Hze 02.06.2009 13:35

Цитата:

Сообщение от 159932
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);
foreach (
$m[1] as $ky=>$va$m[1][$ky] = substr($m[1][$ky],1);
print_r(array_combine($m[1],$m[2]));
?>


Он же сказал,что в $2 data4 невсегда встречаеться $.Незачод,думаем дальше.Тут нужно |

159932 02.06.2009 13:40

2 m0Hze

не вникал я там в его условия, голова щас не сильно варит .. он дал пример, я по нему и составил регулярку .. ну а вообще есть для регулярок тема https://forum.antichat.ru/thread92492.html !

попугай 02.06.2009 13:51

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($data1));
foreach(
$data as $z){
echo 
$z PHP_EOL;


Громоздко( и не регулярка

slesh 02.06.2009 14:09

Всем спс.

krypt3r 02.06.2009 15:53

Один ассоциативный массив тут не получится заюзать, т. к., судя по примеру, ключи могут повторяться. Тут, наверно, следует использовать два обычных массива - в одном ключи, в другом - значения. Как-то так
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:
Код:

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
)


slesh 03.06.2009 09:39

совершенно забыл указать что data - может содежать еще и пробелы )
так что только у попугая нормально работает )


Время: 10:25