Здравствуйте! Я пытаюсь добавить HTML-теги в строку. Я использую функцию preg_replace (), но когда мои шаблоны в массиве перекрываются, preg_replace не работает.
$string = 'abc';
$patterns[0] = '/a/';
$patterns[1] = '/abc/';
$replacements[0] = '<b>$0</b>';
$replacements[1] = '<i>$0</i>';
echo preg_replace($patterns, $replacements, $string);
Это дает следующий результат:
<b>a</b>bc
Но я ожидал такой вывод:
<b><i>a</b>bc</i>
Кажется, что preg_replace берет первый шаблон и заменяет его первой заменой, а затем ищет второй шаблон, но ищет в модифицированный строка.
Я должен использовать функции, которые поддерживать регулярные выражения.
Это потому, что они работают не одновременно, а в цикле. И после первого выражения вы в конечном итоге <b>a</b>bc
так что больше нет abc
для второго выражения, чтобы соответствовать.
Это просто так. И это хорошо, потому что благодаря этому вы не заканчивается неправильной разметкой. Ты сможешь. Regex — это серьезная проблема с HTML или XML.
Используйте некоторый интерпретатор DOM и библиотеку, например PHP DOMDocument
Других решений пока нет …