ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Помогите составить регулярное выражение
  #1  
Старый 02.06.2009, 13:19
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Помогите составить регулярное выражение

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

$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
Провел на форуме:
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..
 
Ответить с цитированием

  #3  
Старый 02.06.2009, 13:35
m0Hze
Он хакер.
Регистрация: 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 невсегда встречаеться $.Незачод,думаем дальше.Тут нужно |
 
Ответить с цитированием

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

Репутация: 1385


По умолчанию

2 m0Hze

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

  #5  
Старый 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($data1));
foreach(
$data as $z){
echo 
$z PHP_EOL;

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

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

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

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

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

  #7  
Старый 02.06.2009, 15:53
krypt3r
Познавший АНТИЧАТ
Регистрация: 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..
 
Ответить с цитированием

  #8  
Старый 03.06.2009, 09:39
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WebScarab - профессиональный инструмент для анализа защищённости веб-приложений Kuzya Авторские статьи 5 09.04.2009 21:54
Помогите составить функцию !{ra!{e/\/ С/С++, C#, Delphi, .NET, Asm 0 14.12.2008 14:04
Помогите составить sql запрос для создания нового админа в ipb 2.1.3 }{0TT@БЬ)Ч Форумы 7 29.10.2006 15:37
Xss на яндексе, помогите составить корректный запрос. red1rect Уязвимости 7 22.03.2006 14:18
Обнаружение Sql инъекций и Css атак k00p3r Чужие Статьи 0 12.06.2005 20:43



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


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




ANTICHAT.XYZ