извлечение (разбор) строки на куски - PullRequest
0 голосов
/ 10 декабря 2010
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  [{CONTENT:meta}]
  [{CONTENT:title}]
  [{CONTENT:head}]
</head>

[{CONTENT:open_body}]

    <p>[{LOCATION:main_1}]</p>
    <p>[{LOCATION:main_1}]</p>

</body>
</html>

У меня есть выше "template_file" в $string.Я пытаюсь сделать цикл, который циклически перебирает строку и на каждой итерации дает мне левую сторону тега, сам тег в новой переменной, а затем правую сторону в другой строке.Я не могу использовать str_replace здесь, потому что мне нужно извлечь то, что находится внутри тегов перед их заменой.

Вывод будет выглядеть примерно так:

$string_left = everything up to a "[{"  
$command = "CONTENT:meta"  
$string_right= everything after the "}]". 

Затем я обработаю данныеиспользуя CONTENT:meta, а затем снова соединяем вещь (string_left + new data + string_right) и затем продолжаем делать это, пока вся вещь не будет проанализирована.

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Вы можете сделать это с помощью относительно простого регулярного выражения:

$inputString = "left part of string [{inner command}] right part of string";


$leftDelim = "\[\{";
$rightDelim = "\}\]";

preg_match("%(.*?)$leftDelim(.*?)$rightDelim(.*)%is", $inputString, $matches);

print_r($matches);

Это покажет, как использовать регулярное выражение. Дополнительные косые черты в переменных разделителя связаны с тем, что в качестве разделителей используются символы регулярного выражения, поэтому вам необходимо их экранировать.

1 голос
/ 10 декабря 2010

Вы можете использовать preg_replace с регулярным выражением, совпадающим с [{...}], наряду с функцией заменителя, которая принимает соответствующую "команду" и возвращает подходящую строку замены:

$output = preg_replace('/\[{([^}]*)}\]/e', 'my_replacer(\'$1\')', $string);

И определить my_replacer следующим образом:

function my_replacer($command) {
  ...
  return $replacement;
}
0 голосов
/ 10 декабря 2010

Почему бы вам не использовать вместо этого программное обеспечение для шаблонов? Вот большой список.

http://www.webresourcesdepot.com/19-promising-php-template-engines/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...