Я хочу разделить строку с preg_split и окружить результаты

Я пытаюсь разделить строку с помощью preg_split, взять результаты, окружить их пользовательскими данными и заново вставить их в исходную строку.

Например:

$string="this is text [shortcode] this is also text [shortcode2] this is text";

После этого я хочу, чтобы строка равнялась:

$string="<span id='0'>this is text </span>[shortcode]<span id='1'> this is also text </span>[shortcode2]<span id='2'>this is text</span>";

Мне удалось разбить строку на массив:

$array=preg_split(/\[[^\]]*\]/,$string);

Затем я попытался использовать цикл for next, чтобы заменить значения, что работало нормально, за исключением случаев, когда значения массива имели одинаковые совпадения в строке.

Любая помощь приветствуется — или другой подход, который может быть лучше.

0

Решение

preg_split() это неправильный инструмент для этого, я бы предложил использовать обратный вызов.

Ниже приведен пример, с которого можно начать, в котором вы можете изменить его в соответствии со своими потребностями.

$str = preg_replace_callback('~(?:\[[^]]*])?\K[^[\]]+~',
function($m) {
static $id = 0;
return "<span id='".$id++."'>$m[0]</span>";
}, $str);

eval.in demo

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]