【问题标题】:php preg replace with conditionsphp preg 替换为条件
【发布时间】:2015-06-30 14:41:26
【问题描述】:

你好我想替换这段css代码:

background:url("/media/image.png")

我有一个网址

$url3 ="http://example.com";

这是我正在使用的代码:

preg_replace('~url\(("|\')?/?(.*?)(?:\1)?\)~', 'url($1'.$url3.'/$2$1)', background:url("/media/image.png");

这段代码的输出给了我:

background:url("http://example.com/media/image.png") 

这就是我想要的,但我的问题是我想在我的正则表达式中添加一些条件,例如,如果 url 在开始时有 //httphttps 然后忽略它不要添加 @ 987654321@给它。

这是我尝试过的正则表达式:

~url\(("|\')?/?(.*?)(?:\1)?\)~(((?!'|\"|http://|https://|//).)*)(['\"])-i 

但它没有工作..

【问题讨论】:

  • 也许使用 parse_url() php.net/manual/en/function.parse-url.php
  • 这是您在过去 24 小时内就该主题提出的第三个问题。为什么不留下一个开放并解释你的问题。 确切地说明您正在尝试什么、您拥有什么以及您想要什么?

标签: php regex preg-replace


【解决方案1】:

由于您正在对替换进行硬编码,我认为再做一次检查是最简单的:

if (false === preg_match("~url\((\"|')(//|https?://)~", $string)) {
    // do replacement
}

另请注意,CSS 中 url() 的参数不需要引用("')。

【讨论】:

    【解决方案2】:

    这可以通过消极的观察来完成:

    url\(("|\')((?!http://|https://).*?)(?:\1)\)
    

    你可以在here观看它。

    查看this question 了解更多信息。

    【讨论】:

      【解决方案3】:

      检查

      $string = preg_replace(
          '/url\(("|\')(?!https?)\/?(.+?)(?:\1)/',
          'url(\1http://example.com/$2\1',
          $string
      )
      

      【讨论】:

      • 请考虑在您的代码 sn-p 中添加至少一些词来解释它为什么以及如何回答 OP 问题
      • @b.enoit.be 都是正则表达式语法))你到底需要什么?
      • 我,没什么,你的答案在低质量的答案队列中,因为它只是代码而且 OP 可能根本不理解它?而那个进一步的读者也没有。
      猜你喜欢
      • 2012-01-26
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多