preg_match_all, найти все экземпляры точного соответствия, которые содержат специальные символы в виде строки, например ***, и добавить класс - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь создать функцию, которая используется для очистки некоторого содержимого и центрирования экземпляров, где найдено точное совпадение, заменить его на span и добавить к нему класс. У меня есть базовая функция, но я не могу понять правильный синтаксис для использования, так как совпадения содержат символы ***.

например <strong>* * *</strong>

Я пытался быть как можно более подробнымнасколько возможно, я действительно надеюсь, что все это имеет смысл, если нет, пожалуйста, не просто пометьте вопросы, пожалуйста, объясните, почему я могу улучшить вопрос и помочь кому-то еще.

Я просмотрел все вопросы о переполнении стека, прежде чем опубликовать этот комментарий, так как знаю, что это довольно много вопросов, основанных на preg_match_all, но ни один из них не соответствует моей ситуации. Я изо всех сил пытаюсь выяснить, какой шаблон использовать, когда в контенте есть специальные символы, я думаю, что это первая проблема, во-вторых, моя функция, представленная ниже, вероятно, не лучший способ, но, будучи любителем, я именно это и имел смысл.

См. Мою функцию ниже, это то, что я пробовал, просматривая другие ответы о переполнении стека и форумах.

function content_format_stars($str = null) {
      if( !empty($str) ) {

        $pattern = "#<strong[^>]*>(.*?)</strong>#";

        $matches = array();

        if(preg_match_all($pattern, $str, $matches, PREG_SET_ORDER) !== false){

          $key = '* * *';

          if($matches) {

            foreach($matches as $match) {

              if ($match[1] == $key) {

                $br = '<span class="crb-content-divider">* * *</span>';

                $new_str = str_replace($match[0], $br, $str);

                return $new_str;

              }

            }

          } else {
            return $str;
          }

        } else {
          return $str;
        }
      }
    }

Ожидаемый результат должен состоять в том, что он просматривает содержимое и находит любые вхожденияименно этой строки <strong>* * *</strong> и замените ее на <span class="crb-content-divider">* * *</span>. Используемая строка является необработанным содержимым из базы данных, именно то, что будет выводом функции the_content () в шаблоне WordPress PHP.

ОБНОВЛЕНИЕ:

ЗдесьПример ввода $ str:

<p>The structure of the work will be familiar to those obliged to read books produced by columnists and broadcast-media figures: a series of mostly disconnected essays and vignettes repackaged as a monograph, lightly stitched up with newly written connective material and punctuated every fourth page or so by something the author doesn’t realize is hilariously stupid or obviously wrong. As with chainsaw sculpture, the process leaves its mark on the product: columns and essays are arranged in a particular order and then written through (sometimes by the author, often by a junior editor) two or three times until the recycled material smells fresh enough to put a cover and title on. Wright has spent decades writing about the politics and <strong>personalities</strong> of Texas, and this book is a kind of greatest-hits album underneath a thin wash of the now-familiar indignant moral hysteria induced in the NPR crowd by the Age of Trump.</p>

<p><strong>* * *</strong></p>

Выше приведен просто фрагмент, содержимое намного длиннее, а в некоторых случаях это несколько экземпляров <p><strong>* * *</strong></p>. Итак, текущая функция возвращает любой экземпляр <strong></strong>, и, исходя из моего ограниченного и базового понимания, я построил его, как вы видите выше.

...