Сделайте первое предложение в каждом абзаце <H3>, указав два тега разрыва и следующий период, вопросительный знак или восклицательный знак. - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь вставить тег HTML после первого предложения в каждом абзаце данного документа.

Код, который я придумал (я не программист), работает.

$insert_pos - это позиция, где тег был последний раз вставлен.Это необходимо, поскольку в большинстве документов содержится более одного абзаца.

Теперь мне нужно также проверить "?"(и, возможно, "!").

$insert_pos = strpos($content, ".", $insert_pos) + 1;
$content= substr_replace( $content, "</tag>", $insert_pos,0 );

Некоторый контекст:

Для CMS, абзац генерируется с </br><br />.Таким образом, документ будет иметь следующий формат:

 Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. </br><br />Lorem ipsum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. </br><br />voluptua.

Мне нужно, чтобы каждое предложение было между <br /> и . ИЛИ ! ИЛИ ?, чтобы стать текстом внутри тега <h3>.Так что в формате <h3>Lorem ipsum.</h3>

1 Ответ

0 голосов
/ 18 февраля 2019

Чтобы применить замену к каждому новому абзацу (начало содержимого или предложения после двух тегов разрыва, сопоставьте эти вхождения, затем используйте \K для «перезапуска соответствия». Затем сопоставьте ноль или более символов, которых нет всписок пунктуации, затем пунктуация, заканчивающаяся предложением. $0 - это совпадающая подстрока, которая используется в строке замены, так что содержимое фактически не теряется.

Код: ( Demo )

$content = "What in the world? I don't know.<br><br>This is paragraph number 2!  What a fascinating read.<br><br>No matter how many paragraphs, look for one of the three sentence ending punctuations after a fully empty line.  Good stuff!";

$content = preg_replace('~(?:^|<br><br>)\K[^.?!]*[.?!]~', '<h3>$0</h3>', $content);
//                             ^^^^^^^^-- </br><br />  to be more specific
echo $content;

Вывод:

<h3>What in the world?</h3> I don't know.<br><br><h3>This is paragraph number 2!</h3>  What a fascinating read.<br><br><h3>No matter how many paragraphs, look for one of the three sentence ending punctuations after a fully empty line.</h3>  Good stuff!
...