Замена определенного текстового шаблона из абзаца на php

#php #replace #preg-replace #design-patterns

#php #заменить #preg-заменить #шаблоны проектирования

Вопрос:

Мне нужно заменить текст, начинающийся с ‘Title:’ и заканчивающийся на ‘Article Body:’, используя preg_replace или другим способом. Замененный текст не будет содержать слова, указанные выше в кавычках.

например:

Название:

пример текста 1

Текст статьи:

пример текста 2

Должен выводиться только

пример текста 2

Как я могу это сделать с помощью php?

Комментарии:

1. звучит достаточно просто. что вы пробовали до сих пор?

2. Я знаю, что это можно было бы сделать с помощью preg_replace. Но у меня нет опыта работы с регулярными выражениями.

Ответ №1:

Используйте положительные / отрицательные прогнозы.

 $result = preg_replace('/(?<=Title:).*(?=Article Body:)/s', 'nTestn', $subject);
  

Приведенное выше регулярное выражение заменит все, что находится внутри Title : … Тело статьи: с помощью nTestn

Объяснение :

 "
(?<=                # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind)
   Title:              # Match the characters “Title:” literally
)
.                   # Match any single character
   *                   # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
(?=                 # Assert that the regex below can be matched, starting at this position (positive lookahead)
   Article Body:      # Match the characters “Article Body:” literally
)
"
  

Ответ №2:

 $str = 'Title: this is sample text Article Body: this is also sample text';

// output: this is sample text this is also sample text
echo preg_replace('~Title: (.*)Article Body: (.*)~', '$1 $2', $str);
  

Регулярные выражения очень полезны, и вы должны научиться их использовать. В Интернете есть много статей, также это обобщает
может вам помочь.

Комментарии:

1. Спасибо! Но это не работает. Мне нужно заменить этот шаблон без текста.

2. @AmilaPremasiri: Удалите ` $ 2` из второго параметра.

3. Работает ли он со строковыми литералами в качестве параметра замены ( '$1 $2' бит)? Я всегда предполагал, что это должна быть, ну, не буквальная строка (например "$1 $2" ).

4. Извините, в текстовой структуре должно быть сокращение строк. Структура похожа на эту статью realorscam.com/big-brother-7-–-grace-is-evicted.html