【问题标题】:preg_replace(): Unknown modifier 'g' in [duplicate]preg_replace():[重复]中的未知修饰符'g'
【发布时间】:2015-05-09 07:22:43
【问题描述】:

我得到这个错误:

preg_replace(): 未知修饰符 'g' in

关于此代码:

$text = preg_replace("/\\[img]([^\\[]*)\\[/img]/","<img src=\"\\1\" border=\"0\">",$text); 

帮助任何人?

编辑: 我的目标是当我使用

[img]http://google.com/img.png[/img] 

在注释字段中,输出应该类似于

<img src="http://google.com/img.png"/>

【问题讨论】:

  • 这有一些问题。你的目标是什么?看起来您可能正在尝试替换 [img]...[/img] 并使用正确的 &lt;img&gt; 标签。未知修饰符错误是由于[/img] 过早结束您的正则表达式。如果我们知道输入和预期输出,我们可以更有效地提供帮助。
  • 这是一个评论系统。当在评论区使用 [img] 时,它会变成 。如果你能理解。我的英语不太好,请原谅:P
  • 未转义的/ 表示正则表达式的结束,给出img 的开关...... im 实际上都是有效的正则表达式开关,但g 不是
  • 请在上面编辑您的问题以显示输入和输出字符串的具体示例。例如[img]stuff[/img] 输出为&lt;img src='stuff' /&gt;

标签: php mysql preg-replace


【解决方案1】:

您必须在正则表达式的外部/ 分隔符内转义所有出现的/

所以你可能正在寻找这个:

preg_replace("/\\[img]([^\\[]*)\\[\/img]/",
             "<img src=\"\\1\" border=\"0\">",
             $text); 

否则正则表达式引擎会将表达式视为在第二个/处终止:

/\\[img]([^\\[]*)\\[/

后面的任何内容都将被视为表达式的修饰符。 im 确实存在,g 不存在。这就是编译正则表达式时抛出错误的原因。

您也可以在/ 旁边使用另一个分隔符。但是您必须确保该字符 not 在表达式本身内部未转义。如果表达式不是文字字符串而是来自变量,那么preg_quote() 函数就派上用场了。

【讨论】:

    【解决方案2】:

    只需使用不同的开始/结束正则表达式字符(例如:`):

    $text = preg_replace("`\\[img]([^\\[]*)\\[/img]`","<img src=\"\\1\" border=\"0\">", $text);
    

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 2011-02-01
      • 1970-01-01
      • 2021-11-11
      • 2011-06-22
      相关资源
      最近更新 更多