ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Помогите составить регулярное выражение |

02.06.2009, 13:19
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Помогите составить регулярное выражение
Немогу допереть как составить реулятрое выражение под данные таково формата:
$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
Последний раз редактировалось slesh; 02.06.2009 в 13:23..
|
|
|

02.06.2009, 13:30
|
|
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
Провел на форуме: 6722038
Репутация:
1385
|
|
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]));
?>
Последний раз редактировалось 159932; 02.06.2009 в 13:45..
|
|
|

02.06.2009, 13:35
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Сообщение от 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 невсегда встречаеться $.Незачод,думаем дальше.Тут нужно |
|
|
|

02.06.2009, 13:40
|
|
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
Провел на форуме: 6722038
Репутация:
1385
|
|
2 m0Hze
не вникал я там в его условия, голова щас не сильно варит .. он дал пример, я по нему и составил регулярку .. ну а вообще есть для регулярок тема https://forum.antichat.ru/thread92492.html !
|
|
|

02.06.2009, 13:51
|
|
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме: 2459557
Репутация:
606
|
|
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;
}
Громоздко( и не регулярка
Последний раз редактировалось попугай; 02.06.2009 в 13:54..
|
|
|

02.06.2009, 14:09
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Всем спс.
|
|
|

02.06.2009, 15:53
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Один ассоциативный массив тут не получится заюзать, т. к., судя по примеру, ключи могут повторяться. Тут, наверно, следует использовать два обычных массива - в одном ключи, в другом - значения. Как-то так
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
)
Последний раз редактировалось krypt3r; 02.06.2009 в 15:55..
|
|
|

03.06.2009, 09:39
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
совершенно забыл указать что data - может содежать еще и пробелы )
так что только у попугая нормально работает )
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|