preg_replace ставит конечный результат не в том месте

так что у меня проблемы с получением preg_replace работать правильно. Я пытаюсь создать свой собственный кастом markdown, Я получаю желаемый результат, потому что кажется, что я кашляю от того, что хотел. Однако проблема заключается в том, что он выплевывает пользовательский ввод за пределы цитаты. Вот пример того, о чем я говорю.

Вот мой код

<?php
$user_input = '> My quote';

$syntax = array(
'/>\s+(.*?)/is'
);

$replace_with_html = array(
'<blockquote><h3>Quote</h3><p>$1</p></blockquote>'
);

$replaced = preg_replace($syntax, $replace_with_html, $user_input);

print($replaced);

Вот пользовательский ввод.

> My quote

И вот результат.

<blockquote><h3>Quote</h3><p></p></blockquote>My quote

Что я хочу это

<blockquote><h3>Quote</h3><p>My quote</p></blockquote>

Как видите, пользовательский ввод находится в неправильном месте (в конце финала HTML код). Есть ли способ исправить это и поместить его в теги абзаца?

0

Решение

Вам не нужно создавать массивы, используйте это:

$user_input = '> My quote';

$syntax = '/>\s+(.*)/s';

$replace_with_html = '<blockquote><h3>Quote</h3><p>$1</p></blockquote>';

$replaced = preg_replace($syntax, $replace_with_html, $user_input);

print($replaced);

Это работает так же 🙁демонстрация)

$user_input = '> My quote';

$syntax = ['/>\s+(.*)/s'];

$replace_with_html = ['<blockquote><h3>Quote</h3><p>$1</p></blockquote>'];

$replaced = preg_replace($syntax, $replace_with_html, $user_input);

print($replaced);

В любом случае, вы хотите, чтобы точка в шаблоне была жадный, удалить ?,

Без этой настройки вы заменяете только >\s+ часть шаблона.


Тем не менее, позвольте мне решить некоторые проблемы, с которыми вы еще не сталкивались …

  1. Как вы знаете, где прекратить цитировать?
  2. Что делать, если кто-то хочет использовать > означать «больше чем»?

Рассмотрите этот новый шаблон и как он может помочь вам решить некоторые будущие задачи:

/^>\s+(\S+(?:\s\S+)*)/m Замена Демо

В демонстрационной ссылке вы увидите, что шаблон будет соответствовать (после > и 1 или более пробелов) один или несколько непробельных символов, за которыми необязательно следуют: один пробельный символ (это может быть пробел / tab / return / newline), затем один или несколько непробельных символов.

Фактически это говорит о том, что вы хотите продолжать сопоставлять текст «кавычки», пока не будет 2 или более последовательных пробельных символов (или еще до конца строки).

Эта корректировка должен дайте своим пользователям возможность точно / удобно цитировать их текст, оставляя при этом невинных > персонаж один.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector