【问题标题】:How do I swap strings using PHP preg_replace?如何使用 PHP preg_replace 交换字符串?
【发布时间】:2020-03-24 07:31:47
【问题描述】:

我有 CSS 代码,我想交换 left 与 rightright 与 left

这里是 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?

【问题讨论】:

  • strtr($css, array('left' => 'right', 'right' => 'left'))
  • 这并不能解决我的问题,而且问题也不同。我厌倦了人们在不应该的情况下关闭这个网站上的问题。
  • 道歉 - 我读了你的文字,上面写着“左右交换左右”,这就是代码的作用,但我没有仔细查看你的示例数据,看你是不交换所有的单词。再次抱歉,我重新提出了这个问题。
  • 你需要preg_replace_callbackstrtr的组合:3v4l.org/PSsT7

标签: php regex preg-replace preg-replace-callback


【解决方案1】:

我成功地弄明白了。

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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2014-05-04
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多