Имеется регулярное выражение:
'~!!(.+?)!!~s'
Замена на:
<red>$1</red>
но дело в том что если текст имеет такую конструкцию
!!\n(перенос строки)привет это текст!!
то текст заменяется правильно, но после тэга <red>(идетноваястрока) а потом уже соответсвенно текст
,
так вот вопрос заключается в том, как можно после того как мы изъяли из текста два восклицательных знака, "trim'нуть" его, а потом уже приложить тэг <red>
из регулярного вырежния, чтобы внутри тэга <red>(небылоэтогопереноса)привет я текст(издесьтоже)</red>
спасибо
Например так:
$input = "!!\nfoo!!";
$output = preg_replace('~!!\s*(.+?)\s*!!~s', '<red>$1</red>', $input);
var_dump($output); // <red>foo</red>
Раз это не дубликат, предлагаю решать проблему через функцию preg_replace_callback()
<?php
$input = "!!\n\n\n\n\n\n\n\n\n\n\n\nfoo\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n!!";
$output = preg_replace_callback('~!!([^!]+(![^!]+)*)!!~', function($match){
return '<red>' . trim($match[1]) . '</red>';
}, $input);
var_dump($output); // string(14) "<red>foo</red>"
Почему? Потому что такая регулярка
~!!([^!]+(![^!]+)*)!!~
на больших текстах должна отрабатывать быстрее чем регулярка с ленивым захватом символов .*?
.
Как меняется крипторынок и к чему готовиться владельцам криптообменников
На собеседовании спросили: что быстрее, обход вектора или обход списка с выводом значений в консоль? Каким образом обходим, не уточнилиЯ ответил,...
Есть исходный код на c++ Пытаюсь собрать его в Cmake в проект для запуска в VSФайл CMakeLists