【问题标题】:regex error preg_replace_callback() : Unknown modifier '.' in [duplicate]正则表达式错误 preg_replace_callback() :未知修饰符“。”一式两份]
【发布时间】:2013-03-22 17:18:36
【问题描述】:

我得到以下字符串:

last_name, first_name
bjorge, philip
kardashian, [kghim]
mer#$##Code:menu:51587daa7030e##$#cury some more
data #$##Code:menu:515r4387daa7dsf030e##$#, freddie

我试图用函数替换中间的代码:'codeParser' 正则表达式是:

$PC_File = preg_replace_callback("(?=\#\$\#\#).*?(?<=\#\#\$\#)", 'codeParser', $PC_File);

但收到此错误:

PHP Warning:  preg_replace_callback() : Unknown modifier '.'

【问题讨论】:

  • @Ashish 我很高兴这只是评论而不是答案:P
  • 现在分隔符问题已经解决了,让我们来谈谈那些lookarounds。 '/#\$##(.*?)##\$#/' 与您的正则表达式匹配的内容相同,但效率更高。捕获组允许您直接访问Code 值(通过$matches[1]),因此您不必在单独的步骤中剥离周围的东西。

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


【解决方案1】:

您需要将正则表达式包装在delimiters 中。它现在正在考虑将() 作为分隔符,并将. 作为修饰符(这当然是无效的)。

"/(?=#\\$##).*?(?<=##\\$#)/"

(我也很确定 # 不需要转义,除非您将它们用作分隔符)

编辑:您需要\\ 才能正确转义双引号中的$

【讨论】:

  • 错误消失了,但它仍然没有调用函数,在在线正则表达式中它的工作,也许 preg_replace_callback 不适合 php 4.39?
  • 补充说明:你可以使用(作为开始分隔符,但结束分隔符需要是)。如果你这样做,表达式只是(?=#\$##).*?(?&lt;=##\$#) 成为标志/修饰符。因此错误。
  • @ÁlvaroG.Vicario 正确,我认为您也可以以同样的方式使用[]{} 作为分隔符。
  • @user1725378 preg_last_error 说什么?
  • 我输入:file_put_contents("getFilelog.txt","error:".preg_last_error()."\n" ,FILE_APPEND);在正则表达式之后.. 文件说错误:0
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多