Как сделать парсер ?

[row device="(отсюда вытащить значение в переменную или массив 1)" ]
	[column width="(отсюда вытащить значение в переменную или массив 2)" ]
	[/column]
[/row]


эти данные приходят с POST ну я думаю это не важно
<div class="row">
	<div class="col-(переменная или массив 1)-(переменная или массив 2)">
	</div>
</div>


вот как то так должно это выглядеть
помогите(( я в back-end не силён
  • Вопрос задан
  • 2205 просмотров
Пригласить эксперта
Ответы на вопрос 3
65536
@65536
ну в данном частном случае можно так
preg_match('/device="(.*)"/Us', $input, $match_1);
preg_match('/width="(.*)"/Us', $input, $match_2);

$output = '<div class="row">
               <div class="col-' . $match_1[1] . '-' . $match_2[1] . '"></div>
           </div>';

где $input - это, то что пришло
Ответ написан
BOOMER_74
@BOOMER_74
Full-Stack разработчик
А RegExp не подойдет? Что то типа:
\[row device="(\d+)"\]
Ответ написан
wordpresso
@wordpresso Автор вопроса
class CBBParse
{
	private $ToParse = "";
	/* Init */
	function CBBParse( $data )
	{
		$this->ToParse = $data;		
	}
	public function parse()
	{
		$this->ToParse = preg_replace_callback( '#\[row[\s]device=\"(?<device>.+?)\"[\s]\](?<content>.*?)\[/row\]#is', array( &$this, "rep_row" ), $this->ToParse );

		return $this->ToParse;
	}
	/* Replacers */
	private function rep_row( $match )
	{
		$return = "<div class=\"row\">";

		$match["content"] = preg_replace(
			'#\[column[\s]width=\"(?<width>.+?)\"[\s]\](?<content>.*?)\[/column\]#ies',
			"\$this->rep_col( '\\1', '\\2', '".$match["device"]."' )",
			$match["content"]
		);

		$return .= $match["content"];

		$return .= "</div>";

		return $return;
	}
	private function rep_col( $width, $content, $device )
	{
		$with_data = explode("/", $width);
		
		$width = "col-".$device."-".(12/$with_data[1]);
		return "<div class=\"".$width."\">".$content."</div>";
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽