2012-03-23 3 views
2

У меня есть некоторые файлы css, которые мне нужно использовать в шаблоне направления RTL. Мне нужно преобразовать все слева направо и все влево в этих файлах css, используя php и регулярное выражение.Нужно регулярное выражение для замены слева направо и справа слева

Например: когда он говорит «margin-left», он должен быть «margin-right» и наоборот.

+3

зачем это делать с PHP? использовать текстовый редактор и заменить его, проще – Alex

+0

Поскольку его нужно заменять только для пользователей RTL? – 472084

+0

, потому что есть много файлов css для изменения, также я хочу, чтобы скрипт использовал его позже. плюс у вас действительно есть время, чтобы пройти все левое и правое в 10 файлах css? – alhoseany

ответ

4

Чем проще способ сделать это было бы:

$rtl = str_replace('left', '{left}', $css); 
$rtl = str_replace('right', '{right}', $rtl); 
$rtl = str_replace(array('{left}', '{right}'), array('right', 'left'), $rtl); 

Большая проблема эти виды CSS:

margin: 0 5px 0 10px; 

Еще более серьезная проблема:

box-shadow: inset 3px 4px 32px black, 2px 3px 2px white 

Вы должны уточните, что такое CSS. Я не думаю, что вы хотите, чтобы написать полноценный CSS анализатору

EDIT: я заменил -left просто left и то же самое с правом также поддержать position: absolute значения позиционирования.

+0

не работает, он конвертируется справа налево, но не слева направо. проверьте этот код: alhoseany

+0

Я думал, что если бы я дал значения в виде массива вроде (слева, справа) -> (справа, слева) после переключения слева направо и продолжения второй замены, он не изменит тех прав, которые он создал, но он сделал это, поэтому все права стали левыми, даже теми, которые были оставлены для начала. – SinistraD

+0

спасибо. работает сейчас. – alhoseany

1

Это должно на хитрость

preg_replace_callback('/(.+)\-(left|right)/i', function($match) { return $match[1].'-'.($match[2] == 'left' ? 'right' : 'left'); }, $str); 
+0

, если вы сделали это с регулярным выражением, вы должны сделать прямой поиск для: и еще один для '/ n', таким образом вы не замените такие значения, как background: url (picture-left.png). Я не делал этого с моим ответом, потому что «left:» и «left:» и «left \ t:» все допустимы. Css – SinistraD

+0

Да, вы совершенно правы, это потребует дальнейшей работы. –

Смежные вопросы