Как поменять строки, используя PHP preg_replace? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть CSS код, и я хочу поменять местами слева направо и справа налево .

Вот пример CSS:

.test{text-align:left;margin-left:10px;float:right}
.test_right{text-align:left;border-right:0px;border-left:1px}
.test_left{float:right}

Должно быть:

.test{text-align:right;margin-right:10px;float:left}
.test_right{text-align:right;border-left:0px;border-right:1px}
.test_left{float:left}

У меня есть следующее preg_replace, но оно соответствует только 1 экземпляру в каждом {}, и мне нужно, чтобы оно совпадало со всеми экземплярами.

$css = preg_replace('/({.*?)left(.*?})/i', '$1right$2', $css);

Другая проблема в том, что я не могу поменять влево и вправо , потому что все будет вправо после запуска первого preg_replace. Как я мог решить эту проблему? Возможно, с помощью preg_replace_callback?

1 Ответ

0 голосов
/ 25 марта 2020

Мне удалось это выяснить.

function callback($match)
{
    $matchit = strtr($match[0], array('left' => 'right', 'right' => 'left'));
    return $matchit;
}

$css= preg_replace_callback('/{(.*?)}/i', 'callback', $css);
echo $css;

preg_replace_callback возвращает что-либо между {и}. Функция обратного вызова заменяет левую и правую.

Я продолжаю дорабатывать эту функцию, чтобы добавить какой-то триггер игнорирования, чтобы PHP игнорировал определенные классы / идентификаторы. Кроме того, он должен будет сделать некоторые изменения в отступах и полях, между прочим. Все это будет превращено в класс для тех, кто использует PHP для простого преобразования CSS в RTL.

Обновление:

Вы можете использовать вместо этого preg_replace :

$css = preg_replace_callback('/{(?!\/\*i\*\/)(.*?)}/i', 'callback', $css);

Затем вы можете поместить / * i * / в любую строку, которую хотите игнорировать. Например:

.test{/*i*/margin-left:0px;text-align:right}
...