2012-03-23 104 views
2

我有一些需要在RTL方向模板中使用的css文件。我需要使用php和正则表达式在这些css文件中将所有的左对齐和右对齐。需要一个正则表达式来替换左边的右边和右边的左边

例如:当它显示“margin-left”时,它应该是“margin-right”,反之亦然。

+3

为什么用PHP做呢?使用文本编辑器并替换它,这很容易 – Alex 2012-03-23 14:55:19

+0

因为它只需要替换为RTL用户? – 472084 2012-03-23 15:01:31

+0

,因为有很多css文件需要更改,我也想让脚本稍后使用它。还有,你真的有时间在10个CSS文件中全部左右移动吗? – alhoseany 2012-03-24 10:09:41

回答

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解析器

编辑: 我更换了-left简单left,并有权也支持position: absolute位置值相同。

+0

它不工作,它会从右向左转换,但不会从左向右转换。检查此代码: <?php $ file ='.logo { float:right; margin-left:30px; }'; $ source = array('left','right'); $ target = array('right','left'); $ rtl = str_replace($ source,$ target,$ file); echo $ rtl; ?> – alhoseany 2012-03-23 18:46:49

+0

我认为,如果我在从左到右切换后左(右) - >(左,右)数组的值为数组,并继续第二次替换,它不会改变他创建的权限,但是,他做到了,所有的权利都离开了,即使是那些一开始就留下的权利。 – SinistraD 2012-03-23 19:46:41

+0

谢谢。现在工作。 – alhoseany 2012-03-24 15:26:05

1

这应招

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

如果用正则表达式做它,你应该做的正向查找:和另一个用于“/ N”,这样一来,你不会像更换背景值:URL(图片 - left.png)。我并没有对我的回答这样做是因为“左:”和“左:”和“左\ T:”都是有效的CSS – SinistraD 2012-03-23 15:17:45

+0

呀你完全正确,这将需要一些进一步的工作。 – 2012-03-23 15:25:08