Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Надо отпарсить строку...


Автор: OverClocker 5.5.2006, 20:00
Вообщем есть у нас строчка:
Код

$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";

Причём обратите внимание, что вся текстовая информация в одинарных кавычках, а там, где "Это действительно тест, а не что-либо другое!" стоит запятая и её нужно включить тоже, но запятые также есть и в самой строке, которые являются и разделителями. Ну вообщем такого плана регулярка. Помогите, пожалуйста!  

Автор: ZlojEzh 5.5.2006, 20:37
Код

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

что-то вроде этого
не тестил, если сразу не запашет - прийдется немного подкрутить; заодно и с регами разобраться ;-)

Автор: OverClocker 5.5.2006, 20:56
Не пашет, но слава Богу, хоть выдаёт пустой массив, а не ошибки интерпретации, как у меня  smile  

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

Тебе какой? 

Автор: OverClocker 6.5.2006, 08:15
Mal Hack, вообще, я тоже хотел сплитом сделать smile Можно его показать? smile 

Автор: Mal Hack 6.5.2006, 09:16
Что показать? 

Автор: OverClocker 6.5.2006, 09:19
Mal Hack, ну сплит по скобкам, кавычкам и запятым. Этот метод. А то я до сих пор пытаюсь разобраться в регулярках, а подобного примера нигде не нахожу.  smile  

Автор: S.A.P. 6.5.2006, 17:42
Не повторяйте это дома  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>';


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

 

Автор: Mal Hack 6.5.2006, 20:22
OverClocker, http://php.net/split
Тут есть пример, разбирайся. 

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


Mal Hack, а! Не, я думал, что ты имеешь в виду preg_split, который я никогда не юзал, потому что не знаю, как его юзать. А split и explode мне хорошо знакомы, но имхо,  это слишком грубо.  

Автор: S.A.P. 11.5.2006, 17:03
OverClocker, я надеюсь ты до конца прочитал мой пост  smile .
 

Автор: OverClocker 11.5.2006, 17:24
S.A.P., Да. Я думаю, что строка безопасна, т.к. символы ' < > $ и некоторые другие заменяются на безопасную альтернативу. Если это имеется в виду "безопасность", то могу уверить, что - строка безопасна. smile 

Автор: S.A.P. 11.5.2006, 17:47
OverClocker, я имею ввиду другое.

Код

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


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

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

К сожалению эта проблема в данном случае никакими экранированиями не искореняется.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)