так что у меня проблемы с получением 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
код). Есть ли способ исправить это и поместить его в теги абзаца?
Вам не нужно создавать массивы, используйте это:
$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+
часть шаблона.
>
означать «больше чем»?Рассмотрите этот новый шаблон и как он может помочь вам решить некоторые будущие задачи:
/^>\s+(\S+(?:\s\S+)*)/m
Замена Демо
В демонстрационной ссылке вы увидите, что шаблон будет соответствовать (после >
и 1 или более пробелов) один или несколько непробельных символов, за которыми необязательно следуют: один пробельный символ (это может быть пробел / tab / return / newline), затем один или несколько непробельных символов.
Фактически это говорит о том, что вы хотите продолжать сопоставлять текст «кавычки», пока не будет 2 или более последовательных пробельных символов (или еще до конца строки).
Эта корректировка должен дайте своим пользователям возможность точно / удобно цитировать их текст, оставляя при этом невинных >
персонаж один.
Других решений пока нет …