如何使用 PHP preg_replace 交换字符串?
How do I swap strings using PHP preg_replace?
我有 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', 'right', $css);
另一个问题是我无法交换左和右,因为在我[=38]之后一切都会右 =]第一个preg_replace。我该如何解决这个问题?也许使用 preg_replace_callback?
我成功地弄明白了。
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 将忽略某些 classes/IDs。此外,它还需要对填充和边距等进行一些反转。对于使用 PHP 的任何人来说,整个事情都会变成 class,以便轻松地将 CSS 转换为 RTL。
更新:
您可以使用此 preg_replace 代替:
$css = preg_replace_callback('/{(?!\/\*i\*\/)(.*?)}/i', 'callback', $css);
然后你可以把 /*i*/ 放到任何你想让它忽略的行中。例如:
.test{/*i*/margin-left:0px;text-align:right}
我有 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', 'right', $css);
另一个问题是我无法交换左和右,因为在我[=38]之后一切都会右 =]第一个preg_replace。我该如何解决这个问题?也许使用 preg_replace_callback?
我成功地弄明白了。
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 将忽略某些 classes/IDs。此外,它还需要对填充和边距等进行一些反转。对于使用 PHP 的任何人来说,整个事情都会变成 class,以便轻松地将 CSS 转换为 RTL。
更新:
您可以使用此 preg_replace 代替:
$css = preg_replace_callback('/{(?!\/\*i\*\/)(.*?)}/i', 'callback', $css);
然后你可以把 /*i*/ 放到任何你想让它忽略的行中。例如:
.test{/*i*/margin-left:0px;text-align:right}