[type=1]текст[/type]
заменить на
<marquee behavior="alternate" direction="left" bgcolor="#ffcc00">текст</marquee>
---
[type=2]текст[/type]
заменить на
<marquee>текст</marquee>
---
[type=3]текст[/type]
заменить на
<td>текст</td>
[type=1]текст[/type]
заменить на
<marquee behavior="alternate" direction="left" bgcolor="#ffcc00">текст</marquee>
---
[type=2]текст[/type]
заменить на
<marquee>текст</marquee>
---
[type=3]текст[/type]
заменить на
<td>текст</td>
dilp, функцию чуть подправил, но принцип тот же - в массив добавляешь текст для подстановки, а в bb-теге указываешь номер ключа для соответствующего значения. Код проверил, всё ок. Или в песочницу сбросить?
/*
[type=1]текст[/type]
заменить на
<marquee behavior="alternate" direction="left" bgcolor="#ffcc00">текст</marquee>
---
[type=2]текст[/type]
заменить на
<marquee>текст</marquee>
---
[type=3]текст[/type]
заменить на
<td>текст</td>
*/
$str = '[type=1]текст[/type]';
//$str = '[type=2]текст[/type]';
//$str = '[type=3]текст[/type]';
$types = [
'marquee behavior="alternate" direction="left" bgcolor="#ffcc00"',
'marquee',
'td',
];
$str = preg_replace_callback(
'~\[type=(\d+)]([^[]+)\[/type]~',
function($m) use($types){
$key = $m[1];
$txt = $m[2];
if (isset($types[--$key])) {
$left = $types[$key];
$right = preg_replace("~(\S+).*~", '$1', $left);
return "<$left>{$txt}</$right>";
}
},
$str
);
echo $str;давай![]()
работает![]()
# dilp (11.12.2019 / 23:18)как по мне, так это не удобно, т.к. юзеру нужно будет "помнить", какой нужно использовать номер, что бы в теге добавился к примеру td.
работает
ДоХтор, это нужно в первую очередь мне
# dilp (11.12.2019 / 23:38)Тогда попробуй ещё такой вариант, он вроде бы устойчивее к ошибкам
ДоХтор, это нужно в первую очередь мне
$str = '[type=1]текст[/type]';
$types = [
'marquee behavior="alternate" direction="left" bgcolor="#ffcc00"',
'marquee',
'td'
];
$str = preg_replace_callback(
'~\[type=(\d+)]([^[]+)\[/type]~',
function($m) use($types){
$key = $m[1];
$txt = $m[2];
if (isset($types[--$key])) {
$tag = $types[$key];
$attr = '';
if (strpos($tag, ' ')) {
[$tag, $attr] = explode(' ', $tag, 2);
$attr = " $attr";
}
return "<$tag{$attr}>{$txt}</$tag>";
}
return $m[0];
},
$str
);
echo $str;а почему там могут быть ошибки?
# dilp (12.12.2019 / 00:37)зависит от того, что в массиве передавать.
а почему там могут быть ошибки?