Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Надо отпарсить строку... совсем не понимаю в регулярках, помогите 
V
    Опции темы
OverClocker
  Дата 5.5.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Вообщем есть у нас строчка:
Код

$str="function('First_Test', 123, 'Second_Test', 833, 'Это действительно тест, а не что-либо другое!', 12, 34, 44);";

Помогите отпарсить её так, чтобы получился массив из восьми параметров, например такой:
Код

$str[0]="First_Test";
$str[1]="123";
$str[2]="Second_Test";
$str[3]="833";
$str[4]="Это действительно тест, а не что-либо другое!";
$str[5]="12";
$str[6]="34";
$str[7]="44";

Причём обратите внимание, что вся текстовая информация в одинарных кавычках, а там, где "Это действительно тест, а не что-либо другое!" стоит запятая и её нужно включить тоже, но запятые также есть и в самой строке, которые являются и разделителями. Ну вообщем такого плана регулярка. Помогите, пожалуйста!  
PM MAIL WWW   Вверх
ZlojEzh
Дата 5.5.2006, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: 2
Всего: 15



Код

preg_match_all("#fucntion\(\s*'([^']+)'\s*,\s*(\d+)\s*,\s*'([^']+)'\s*,\s*(\d+)\s*,\s*'([^']+)'\s*,\s*(\d+)\s*,\s*(\d+)\s*\)#i",$str,$match);
print_r($match);

что-то вроде этого
не тестил, если сразу не запашет - прийдется немного подкрутить; заодно и с регами разобраться ;-)
PM MAIL ICQ   Вверх
OverClocker
Дата 5.5.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Не пашет, но слава Богу, хоть выдаёт пустой массив, а не ошибки интерпретации, как у меня  smile  
PM MAIL WWW   Вверх
Mal Hack
Дата 5.5.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Есть два варианта.
Первый split, по () потом по ковычкам и запятым.
Второй - лексический анализ, как для подцветки кода.

Тебе какой? 
PM ICQ   Вверх
OverClocker
Дата 6.5.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Mal Hack, вообще, я тоже хотел сплитом сделать smile Можно его показать? smile 
PM MAIL WWW   Вверх
Mal Hack
Дата 6.5.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Что показать? 
PM ICQ   Вверх
OverClocker
Дата 6.5.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Mal Hack, ну сплит по скобкам, кавычкам и запятым. Этот метод. А то я до сих пор пытаюсь разобраться в регулярках, а подобного примера нигде не нахожу.  smile  
PM MAIL WWW   Вверх
S.A.P.
Дата 6.5.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Не повторяйте это дома  smile 
Код

$str = "function('First_Test', 123, 'Second_Test', 833, 'Это действительно тест, а не что-либо другое!', 12, 34, 44);";

eval('$array = '.str_replace('function', 'array', $str, $unused = 1));

echo '<pre>';
print_r($array);
echo '</pre>';


если строка небезопасна, то забудте про этот метод...

 
PM MAIL   Вверх
Mal Hack
Дата 6.5.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



OverClocker, http://php.net/split
Тут есть пример, разбирайся. 
PM ICQ   Вверх
OverClocker
Дата 11.5.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



S.A.P., вот за это огромное спасибо! Очень-очень благодарен! Правда, я так и не понял, как это работает... Но главное работает! Спасибо smile)


Mal Hack, а! Не, я думал, что ты имеешь в виду preg_split, который я никогда не юзал, потому что не знаю, как его юзать. А split и explode мне хорошо знакомы, но имхо,  это слишком грубо.  
PM MAIL WWW   Вверх
S.A.P.
Дата 11.5.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



OverClocker, я надеюсь ты до конца прочитал мой пост  smile .
 
PM MAIL   Вверх
OverClocker
Дата 11.5.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



S.A.P., Да. Я думаю, что строка безопасна, т.к. символы ' < > $ и некоторые другие заменяются на безопасную альтернативу. Если это имеется в виду "безопасность", то могу уверить, что - строка безопасна. smile 
PM MAIL WWW   Вверх
S.A.P.
Дата 11.5.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



OverClocker, я имею ввиду другое.

Код

$str = "function(print('превед, пацаны'), 123, 'Second_Test', 833, 'Это действительно тест, а не что-либо другое!', 12, 34, 44);";


попробуй прогнать  smile .

Поэтому если имеется такая опасность - получение строки от левых пользователей, то лучше вернуться к старому, доброму split smile . 

К сожалению эта проблема в данном случае никакими экранированиями не искореняется.
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.