Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Как распарсить строку? (https://javascript.ru/forum/server/36789-kak-rasparsit-stroku.html)

vostok 27.03.2013 15:11

Как распарсить строку?
 
Есть строки:
"array(), array('example' => array(0 => 'one', 1 => 'two', 3 => '...'), 'other' => '...'), TRUE"
"'one', array('one' => 1, 'two' => 'two', 'three' => '...'), NULL"
...
Это собственно параметры функции, они могут быть самые разные.
Задача - парсинг логов трассировки php приложения.
Нужно всего лишь разбить эти параметры по отдельности.
Можно было бы разделить просто по запятым, но в параметрах есть многомерные массивы где есть запятые.
Может кто-то подскажет способ, регулярное выражение или ещё что-то. Можно php или js.

danik.js 28.03.2013 06:58

eval($str) ?

nerv_ 28.03.2013 21:41

Цитата:

Сообщение от danik.js
eval($str) ?

и что, поможет? :)

Передавайте как ассоциативный массив, что мешает?

danik.js 28.03.2013 23:00

nerv_, я думал задача - получить из этих строк массивы.
Вот так:
$str = "array(), array('example' => array(0 => 'one', 1 => 'two', 3 => '...'), 'other' => '...'), TRUE";

$array = eval('return array(' . $str . ');');
var_dump($array);


Не знаток PHP...

vostok 29.03.2013 20:47

Парсится лог файл трассировки функций, и задача разделить ту мешанину, что приходит в качестве параметров в эти функции, а это: объекты; массивы пустые, многомерные; строки; ресурсы; регвыражения и так далее, они расположены в строке через запятую. Разделить для вывода в html удобного для просмотра.
Причем проблем не было со всем кроме массивов, eval не помогает. Пришлось написать функцию которая ищет "array" и считает скобки формируя уровень вложенности распознавая тем самым эти массивы, ну и пару регулярок. Вопрос вроде бы снят. Хотя надо ещё дописывать код для учета всех случаев, например если в качестве параметра придет массив с запросами к базе данных - там тоже скобки.

danik.js 29.03.2013 21:26

Цитата:

Сообщение от vostok
eval не помогает

А с чем именно возникли проблемы?
Вставил код сюда: http://phpjs.hertzen.com/console.html и получил дамп входных параметров. Что не так?

vostok 30.03.2013 00:21

Цитата:

Сообщение от danik.js (Сообщение 243356)
А с чем именно возникли проблемы?
Вставил код сюда: http://phpjs.hertzen.com/console.html и получил дамп входных параметров. Что не так?

Логи в файл пишутся не для исполнения и там могут присутствовать вообще левые символы такие как многоточие, и ещё ряд случаев. eval эти строки не поймет. Но вобщем и это не проблема - можно подчистить. Так казалось по началу. Тем не менее eval не перестал выдавать ошибки и пришлось от него отказатсья. Он работает в цикле, 2000 итераций, сложно отловить ошибку в таких условиях.

За ссылку благодарю может пригодится, но в данном случае не подходит.

danik.js 30.03.2013 06:48

Цитата:

Сообщение от vostok
За ссылку благодарю

На всякий случай: по ссылке не песочница для PHP. В песочницах eval запрещен. То - интерпретатот PHP, написанный на JS и исполняющийся в браузере. Но в нем есть ошибки, так что это не полноценный php-интерпретатор.


Часовой пояс GMT +3, время: 15:40.