【问题标题】:preg_replace(): Compilation failedpreg_replace():编译失败
【发布时间】:2015-09-07 23:28:27
【问题描述】:

这里有人可以帮助我吗? 模式是

/\[url=?\]([a-z0-9:\.\\\/-\s]*?)\[\/url\]/isS

错误:

preg_replace():编译失败:偏移 26 处字符类中的无效范围

【问题讨论】:

  • 第 26 个字符是什么?

标签: php preg-replace


【解决方案1】:

转义减号 (-)

 /\[url=?\]([a-z0-9:\.\\\/\-\s]*?)\[\/url\]/is

Demo

【讨论】:

  • 谢谢。现在在偏移量 23 处得到相同的警告,并且模式发生了变化。新模式现在是:/[url=([a-z0-9:\.\\\/-\s]+?)](.*?)[\/url]/isS 这就是它的由来你的。
  • 在我的回答中查看演示
【解决方案2】:

这应该在 PHP (PCRE) 中工作:

/\[url=?\]([a-z0-9:\.\\\/\-\s]*?)\[\/url\]/is

首先在你的字符类语句[] 中转义-,否则你会得到一个错误的范围错误。

第二个/S 修饰符对于您的模式可能不是一个好主意。阅读:

当一个模式要被多次使用时,值得花费 更多时间分析它以加快 匹配。如果设置了这个修饰符,那么这个额外的分析是 执行。目前,研究一个模式只对 没有单一固定起始点的非锚定模式 字符。

Source

测试你的正则表达式regex101.com 相当不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多