【问题标题】:Unknown modifier '/' error in PHP [duplicate]PHP中的未知修饰符'/'错误[重复]
【发布时间】:2010-09-15 16:56:59
【问题描述】:
preg_replace('/http:///ftp:///', 'https://', $value);

http://ftp:// 内的$value 应替换为https://

此代码给出错误:

preg_replace() [function.preg-replace]: Unknown modifier '/' 

什么是这个任务的真正正则表达式?

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    尝试使用不同的分隔符,例如#

    preg_replace('#http://|ftp://#', 'https://', $value);
    

    或(不太推荐)转义正则表达式中每次出现的分隔符:

    preg_replace('/http:\/\/|ftp:\/\//', 'https://', $value);
    

    另外你正在搜索模式http:///ftp://,这真的没有多大意义,可能你的意思是http://|ftp://

    您可以将正则表达式缩短为:

    preg_replace('#(?:http|ftp)#', 'https', $value);
    

    了解错误: Unknown modifier '/'

    在您的正则表达式'/http:///ftp:///' 中,第一个/ 被视为起始分隔符,: 之后的/ 被视为结束分隔符。现在我们知道我们可以为正则表达式提供修饰符来改变其默认行为。一些这样的修饰符是:

    • i : 做匹配案例 不敏感
    • m:多行搜索

    但是 PHP 在结束分隔符之后看到的是另一个 / 并试图将其解释为修饰符但失败,从而导致错误。

    preg_replace 返回更改后的字符串。

    $value = 'http://foo.com';
    $value = preg_replace('#http://|ftp://#', 'https://', $value);
    // $value is now https://foo.com
    

    【讨论】:

    • 你在收集preg_replace 的返回值吗,就像我上面展示的那样?
    【解决方案2】:

    使用另一个分隔符,例如“#”。

    preg_replace('#/http://|ftp://#', 'https://', $value);
    

    不要混淆 / 和 |

    【讨论】:

      【解决方案3】:
      preg_replace('!(http://|ftp://)!', 'https://', $value);
      

      长话短说:正则表达式需要包含在分隔符中,并且在整个正则表达式中必须是唯一的。如果要使用 /,则需要对正则表达式中剩余的 /-s 进行转义。然而,这使得语法看起来有点难看。幸运的是,您可以使用任何字符作为分隔符。 !工作正常,其他角色也一样。

      正则表达式的其余部分仅列出了两个选项,其中任何一个都将替换为第二个参数。

      【讨论】:

        【解决方案4】:
        preg_replace('|http:\/\/ftp:\/\/', 'https://|', $value);
        

        【讨论】:

          【解决方案5】:

          改用这个:

          preg_replace('-(http|ftp)://-', 'https://', $value);
          

          或者

          preg_replace('/(http|ftp):\/\//', 'https://', $value);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-01
            • 2011-08-01
            • 1970-01-01
            • 2015-05-09
            相关资源
            最近更新 更多