Я использую следующее:
$pattern_array = array();
$replace_array = array();
$pattern_array[] = '#\[vc_row][vc_column width = "1/2" css = ".vc_custom_1503896034143{margin-bottom: 40px !important;}"][shortcode_testimonials_carousel#i';
$replace_array[] = '[vc_row fixed_width = "true"][vc_column width = "1/2" css = ".vc_custom_1503896034143{margin-bottom: 40px !important;}"][shortcode_testimonials_carousel';
echo preg_replace($pattern_array, $replace_array, $content);
Чтобы заменить этот текст:
[vc_row][vc_column width = "1/2" css = ".vc_custom_1503896034143{margin-bottom: 40px !important;}"][shortcode_testimonials_carousel
С этим текстом:
[vc_row fixed_width = "true"][vc_column width = "1/2" css = ".vc_custom_1503896034143{margin-bottom: 40px !important;}"][shortcode_testimonials_carousel
Но получаю ошибку:
preg_replace(): Compilation failed: range out of order in character class at offset 69
Мне не нужны никакие правила регулярных выражений или что-то еще, я просто хочу заменить один блок текста другим, игнорируя все [квадратные скобки] и «кавычки», есть ли способ сделать это с помощью preg_replace?
Кстати, я знаю, что могу использовать str_replace, но я добавляю это в функцию, которая перебирает массив и уже использует preg_replace, поэтому str_replace не вариант.
Прочтите последнее предложение в моем вопросе
Неважно. Вы так зацикливаетесь? Это по-прежнему str_replace, который вам нужен. Используйте правильный инструмент.
Получаете ли вы что-нибудь, размещая такие бесполезные ответы? Если вы не знаете решения, зачем вообще отвечать?
@Andreas Я думаю, он говорит, что другие элементы массива не являются статическими заменами, и он пытается использовать один и тот же метод для всех из них.
Именно Бармар, место на
На мой взгляд, это все еще не повод использовать не тот инструмент. Str_replace будет работать быстрее, поэтому лучше использовать статические замены в str_replace и динамические в preg_replace. По-прежнему выполняется то же количество вызовов функций, только один способ быстрее другого.
Если мне придется снова перебрать все данные, чтобы использовать str_replace, что будет быстрее? Я так не думаю. Если это «неправильный инструмент», для чего нужна функция preg_quote?
Не будь придурком. Дело не в том, чтобы дважды повторять одни и те же значения. Ваш pattern_array должен быть разделен на две части. Один со статикой, а другой с динамикой. Например, скажем, это 3 + 3. Это означает, что вы запускаете str_replace на трех и preg_replace на трех. И да, это быстрее и использует меньше памяти, так как вы не используете все накладные расходы функций preg. И preg_quote не предполагается использовать в качестве патча для плохо написанного кода. Он экранирует символы регулярных выражений, но правильно сделанный код работает без preg_quote.
Я не могу использовать str_replace, я четко упомянул об этом в своем вопросе. Кароль Самборски уже отлично решил проблему, так что я, честно говоря, не уверен, что вы пытаетесь получить в данный момент.
Я пытаюсь научить вас делать код, который работает быстрее, но, видимо, бесполезен. Продолжай копать, приятель.
Посмотрите здесь смесь str_replace и preg_replace, что, как вы говорите, невозможно. 3v4l.org/hR9rF






Вам просто нужно экранировать специальные символы, используемые в регулярных выражениях. Есть замечательная функция под названием preg_quote, которая сделает это автоматически.
$pattern_array = array();
$replace_array = array();
$pattern_array[] = '#' . preg_quote('[vc_row][vc_column width = "1/2" css = ".vc_custom_1503896034143{margin-bottom: 40px !important;}"][shortcode_testimonials_carousel', '#') . '#i';
$replace_array[] = '[vc_row fixed_width = "true"][vc_column width = "1/2" css = ".vc_custom_1503896034143{margin-bottom: 40px !important;}"][shortcode_testimonials_carousel';
echo preg_replace($pattern_array, $replace_array, $content);
Хорошо, я понятия не имел о существовании preg_quote, большое спасибо за проницательный ответ
ПОЧЕМУ вы используете preg_replace для статической замены?