LINUX.ORG.RU

Регулярные выражения PHP


0

1

Не пойму как распарсить такую структуру:

serge
{
    type = man
    position = 0 -1.5
}
viktor
{
    type = man
    position = 2.8 1.2
}
sasha
{
    type = woman
    position = 1.5 -2.6
}
masha
{
    type = woman
    position = 3.1 -1.5
}


Нужно чтобы на выходе отдавалось так:
MAN (номер индекса)
position_x = 0
position_y = -1.5

...


Я смог написать только так:
MAN (номер индекса)
position = 0 -1.5

...
А вот как распарсить position = 0 -1.5 и отдать в виде position_x, position_y не знаю, можете помочь?

Код:
<?php

$config = file_get_contents('test.config');

preg_match_all("/type = [[:alpha:]]{0,5}|position = [[:print:]]{0,}[[:digit:]]/", $config, $text);

$count = 0;
foreach ($text as $texts) {
$count = count($texts);
for ($i=0; $i < $count; $i++) {
if ($texts[$i] === "type = man") {
echo "MAN ($i)<br>".$texts[$i+1]."<br><br>";
}
elseif ($texts[$i] === "type = woman") {
echo "WOMAN ($i)<br>".$texts[$i+1]."<br><br>";
}
}
}
?>

Ответ на: комментарий от marvin_yorke

Это скобки которые, то есть вроде '/(type = ([[:alpha:]]{0,5}))/' этого?

Примерно понял, неясно теперь другое, как написать так, чтобы выдавалось только самое внутреннее выражение в скобках?

vladmenshikov
() автор топика
Ответ на: комментарий от vladmenshikov

Так углубляйся в ман.

(abc(def))     тут \1 - это "abcdef", \2 - "def"
Ещё можно группировать без обратной связи:
(?:abcd) - будет сгруппировано, но \N новый не создаст

Kalashnikov ★★★
()

Если position всегда через 1 пробел, тогда что-то можно как-то так:

$position = '3.1 -1.5';

$positions = explode('  ', $position);
$x = $positions[0];
$y = $positions[1];

Test11
()
Ответ на: комментарий от Test11

Лишнее «отстритреплейсить». И да, в приведенном мною коде лишний пробельчик в explode().

Test11
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.