|
|
|
| Помогите составить регулярное выражение для разборки ini файла.
Примерный формат файла:
[test0]
var0 = "val0";
var1 = "val1";
var2 = "val2";
var3 = "val3";
[test1]
var0 = "val0";
var1 = "val1";
var2 = "val2";
var3 = "val3";
|
Нужно учитывать, что там могут быть комментакии слебующих типов:
// комментакий
# комментакий
/* комментакий */
На выходе должен появиться массив такого вида:
Array
(
[test0] => Array
(
[var0] => val0
[var1] => val1
[var2] => val2
[var3] => val3
)
[test1] => Array
(
[var0] => val0
[var1] => val1
[var2] => val2
[var3] => val3
)
)
|
| |
|
|
|
|
|
|
|
для: pini-pini
(13.07.2006 в 11:32)
| | up | |
|
|
|
|
|
|
|
для: pini-pini
(15.07.2006 в 17:12)
| | Написал в виде функции. В качестве аргумента принимается имя файла. Результат работы функции - массив по описанной вами схеме. Комменты игнорируются.
<?php
function ini_parse($file)
{
// считываем построчно файл ini
$ini = file($file);
// парсим
foreach($ini as $line)
{
// ищем название блока ( [test0] )
$ln = preg_match('%\[(.*)\]%', $line, $matches);
if ($ln)
{
$tag = $matches[1];
}
// ищем переменную и ее значение
$ln = preg_match('%([a-z0-9]+)\s*=\s*"(.*)";%', $line, $matches);
if ($ln)
{
// записываем в массив
$ini_arr[$tag][$matches[1]] = $matches[2];
}
}
return $ini_arr;
}
?>
|
| |
|
|
|
|
|
|
|
для: pini-pini
(13.07.2006 в 11:32)
| | Можно конечно поступить так,
<?php
$text = '[test0]
var0 = "val0";
var1 = "val1";
var2 = "val2";
var3 = "val3";
[test1]
var0 = "val0";
var1 = "val1";
var2 = "val2";
var3 = "val3";';
$pattern = "|\[([^\]]+)\][\s]+([^\[]+)|is";
preg_match_all($pattern, $text, $out);
for($i = 0; $i < count($out); $i++)
{
if(!empty($out[1][$i]))
{
$pattern = "|([\w\d]+)[\s]*=[\s]*\"([\w\d]+)\";|is";
preg_match_all($pattern, $out[2][$i], $var);
for($j = 0; $j < count($var); $j++)
$result[$out[1][$i]][$var[1][$j]] = $var[2][$j];
}
}
echo "<pre>";
print_r($result);
echo "</pre>";
?>
|
но вообще это будет изобретением велосипеда, так как в PHP существует стандартная фунция parse_ini_file(), для разбора ini-файлов. | |
|
|
|
|
|
|
|
для: cheops
(15.07.2006 в 19:03)
| | Спасибо!
Огромное спасибо!
Работает.
PS: на счёт изобретения велосипеда: я делаю свою небольшую платформенно и function'но независимую библиотечку для работы с ini файлами | |
|
|
|
|
|
|
|
для: pini-pini
(13.07.2006 в 11:32)
| | Код WebTech более подходит.
У cheops'а обрезаються парметры.
Спасибо. | |
|
|
|