我如何使用PHP preg_replace交换字符串?

问题描述 投票:0回答:1

我有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);

与此有关的另一个问题是,我无法交换left和right,因为在运行第一个preg_replace之后,所有内容都会成为right。我该如何解决这个问题?也许使用preg_replace_callback?

php regex preg-replace preg-replace-callback
1个回答
0
投票

我能够成功解决它。

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将忽略某些类/ ID。此外,除其他外,它还需要对填充和边距进行一些反转。对于使用PHP轻松将CSS转换为RTL的任何人,整个过程都将成为一个类。

更新:

您可以改用此preg_replace:

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

然后,您可以将/ * i * /放在您要忽略的任何行中。例如:

.test{/*i*/margin-left:0px;text-align:right}
© www.soinside.com 2019 - 2024. All rights reserved.