HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Помогите составить регулярное выражение
  #1  
Старый 02.06.2009, 13:19
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 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..
 
Ответить с цитированием

  #2  
Старый 02.06.2009, 13:30
159932
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
С нами: 9799586

Репутация: 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..
 
Ответить с цитированием

  #3  
Старый 02.06.2009, 13:35
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
С нами: 9223466

Репутация: 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 невсегда встречаеться $.Незачод,думаем дальше.Тут нужно |
 
Ответить с цитированием

  #4  
Старый 02.06.2009, 13:40
159932
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
С нами: 9799586

Репутация: 1385


По умолчанию

2 m0Hze

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

  #5  
Старый 02.06.2009, 13:51
попугай
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
С нами: 9642449

Репутация: 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($data1));
foreach(
$data as $z){
echo 
$z PHP_EOL;

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

Последний раз редактировалось попугай; 02.06.2009 в 13:54..
 
Ответить с цитированием

  #6  
Старый 02.06.2009, 14:09
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Всем спс.
 
Ответить с цитированием

  #7  
Старый 02.06.2009, 15:53
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами: 10021597

Репутация: 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..
 
Ответить с цитированием

  #8  
Старый 03.06.2009, 09:39
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

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



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите составить функцию !{ra!{e/\/ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 0 14.12.2008 14:04
Помогите составить sql запрос для создания нового админа в ipb 2.1.3 }{0TT@БЬ)Ч Уязвимости CMS / форумов 7 29.10.2006 15:37
Xss на яндексе, помогите составить корректный запрос. red1rect Уязвимости 7 22.03.2006 14:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.