получить данные от двух строк в PHP - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть следующая строка

$str = "Loreum Ipsum Dolor Sit Amet <code>Some HTML Code like <h1>Head</h1></code>. Loreum Ipsum <code>Some Code</code> Dolor Sit Amet."


Мне нужно получить значение из всех тегов кода и применить к этим данным функцию PHP, равную str_replace(), и присоединиться к ней. строка обратно.

str_replace('<', '&lt;', $sub_str);

Я пытался использовать explode(), но не смог получить все теги <code> из строки.

1 Ответ

1 голос
/ 26 февраля 2020

Вам не нужно извлекать строку в тегах <code>, заменять текст и присоединять что-либо обратно. Все это можно сделать, используя preg_replace_callback:

<?php
$str = "Loreum Ipsum Dolor Sit Amet <code>Some HTML Code like <h1>Head</h1></code>. Loreum Ipsum <code>Some Code</code> Dolor Sit Amet.";
$str = preg_replace_callback(
    '|(?s)(?<=<code>).*?(?=</code>)|',
    function ($matches) {
        return str_replace('<', '&lt;', $matches[0]);
        // to replace '>' also:
        //return str_replace('>', '&gt;', str_replace('<', '&lt;',$matches[0]));
    },
    $str
);
echo $str;

Отпечатки:

Loreum Ipsum Dolor Sit Amet <code>Some HTML Code like &lt;h1>Head&lt;/h1></code>. Loreum Ipsum <code>Some Code</code> Dolor Sit Amet.

См. Демонстрацию Regex

  1. (s) Устанавливает однострочный режим так, чтобы . соответствовал символу новой строки.
  2. (?<=<code>) Подтверждение о том, что предыдущие символы соответствуют <code>.
  3. .*? Не жадное совпадение, совпадающее с 0 или более символами до ...
  4. (?=) Предварительное утверждение о том, что следующие символы соответствуют <code>.

PHP Демо

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