Anonymous
Как извлечь аргументы из функции и сгруппировать их по типу, int, строке или массиву
Сообщение
Anonymous » 15 июл 2024, 17:35
Есть ли способ извлечь аргумент функции и сгруппировать их по типу: int, string или массив из подстроки с регулярным выражением в PHP?
Мне нужно найти все аргументы типа строку и ставьте перед ними знак доллара.
До сих пор я пробовал этот шаблон, но мне не удалось решить проблему:
Код: Выделить всё
$re = '/(?\w+)\((?.\w+|\d+)|(?\[[^][]*])\)/';
$str = '
{{ labels(1, ["Jonh", "Doe"]) }}
{{ unescape(one, two, three) }}
{{ trans("welcome", ["Jane", "Doe"]) }}
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
// Output
array (
0 => array (
0 => 'unescape(one',
'func' => 'unescape',
1 => 'unescape',
'arg' => 'one',
2 => 'one',
),
1 => array (
0 => 'labels(1',
'func' => 'labels',
1 => 'labels',
'arg' => '1',
2 => '1',
),
2 => array (
0 => '["Jane", "Doe"])',
'func' => '',
1 => '',
'arg' => '',
2 => '',
'arr' => '["Jane", "Doe"]',
3 => '["Jane", "Doe"]',
),
)
Что мне нужно
Код: Выделить всё
array (
0 => array (
0 => 'escape(one, two, three)',
'func' => 'unescape',
'arg' => 'one', 'two', 'three',
'str' => 'one', 'two', 'three'
),
1 => array (
0 => 'labels(1, "id", ["Jonh", "Doe"])',
'func' => 'labels',
'arg' => '1', 'id', ["Jonh", "Doe"],
'int' => 1,
'str' => 'id',
'arr' => ["John", "Doe"]
),
2 => array (
0 => 'trans("welcome", ["Jane", "Doe"])',
'func' => 'trans',
'arg' => '"welcome", ["Jane", "Doe"]',
'str' => 'welcome',
'arr' => '["Jane", "Doe"]'
),
)
Заранее спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/787 ... -string-or
1721054100
Anonymous
Есть ли способ извлечь аргумент функции и сгруппировать их по типу: int, string или массив из подстроки с регулярным выражением в PHP? Мне нужно найти все аргументы типа строку и ставьте перед ними знак доллара. До сих пор я пробовал этот шаблон, но мне не удалось решить проблему: [code]$re = '/(?\w+)\((?.\w+|\d+)|(?\[[^][]*])\)/'; $str = ' {{ labels(1, ["Jonh", "Doe"]) }} {{ unescape(one, two, three) }} {{ trans("welcome", ["Jane", "Doe"]) }} '; preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); // Print the entire match result var_dump($matches); // Output array ( 0 => array ( 0 => 'unescape(one', 'func' => 'unescape', 1 => 'unescape', 'arg' => 'one', 2 => 'one', ), 1 => array ( 0 => 'labels(1', 'func' => 'labels', 1 => 'labels', 'arg' => '1', 2 => '1', ), 2 => array ( 0 => '["Jane", "Doe"])', 'func' => '', 1 => '', 'arg' => '', 2 => '', 'arr' => '["Jane", "Doe"]', 3 => '["Jane", "Doe"]', ), ) [/code] Что мне нужно [code]array ( 0 => array ( 0 => 'escape(one, two, three)', 'func' => 'unescape', 'arg' => 'one', 'two', 'three', 'str' => 'one', 'two', 'three' ), 1 => array ( 0 => 'labels(1, "id", ["Jonh", "Doe"])', 'func' => 'labels', 'arg' => '1', 'id', ["Jonh", "Doe"], 'int' => 1, 'str' => 'id', 'arr' => ["John", "Doe"] ), 2 => array ( 0 => 'trans("welcome", ["Jane", "Doe"])', 'func' => 'trans', 'arg' => '"welcome", ["Jane", "Doe"]', 'str' => 'welcome', 'arr' => '["Jane", "Doe"]' ), ) [/code] Заранее спасибо. Подробнее здесь: [url]https://stackoverflow.com/questions/78750385/how-to-extract-arguments-from-a-function-and-group-them-by-type-int-string-or[/url]