regex — Как заменить несколько обратных косых черт всего одним, используя переполнение стека

Я столкнулся с ситуацией, когда у меня были строки, которые имели слишком много обратных косых черт. Мой поиск обнаружил, что другие говорят, что используют PHP stripslashes (), но это не помогло, потому что их было больше, чем можно было бы удалить. Так что же такое хорошее рабочее решение?

Редактировать:

Я работал с кодом, который искал и заменял значения в файле .sql в течение нескольких итераций. mysql_real_escape_str () каждый раз добавляла обратную косую черту к значениям, поэтому я заканчивал такими строками в содержимом файла sql:

s:10:\\\\\\\\\\\\\\\\"value_here\\\\\\\\\\\\\\\\";

Таким образом, после всех итераций поиска и замены содержимое файла sql стало непригодным для использования из-за дополнительной обратной косой черты.

-1

Решение

preg_replace () хорошо работает для этого

preg_replace("/\\{2,}/", "\\", $input_lines);

Вам просто нужно найти все вхождения 2 или более обратной косой черты и заменить их на одну.

0

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

Лучшее решение для меня это:

$str = preg_replace('/\\\\{2,}/', '\\',$strwithtoomanybackslashes);

Это заменяет 2 или более обратной косой черты только одним. И в случае, если количество обратных слешей выше выглядит сбивающим с толку … это потому, что вы должны избегать каждого обратного слеша с помощью обратного слеша.

Выше были исправлены все строки в содержимом файла sql, которые имели слишком много обратной косой черты.

Преобразование строк, как это:

s:10:\\\\\\\\\\\\\\\\"value_here\\\\\\\\\\\\\\\\";

Для того, чтобы:

s:10:\"value_here\";
0