2013-04-01 48 views
2

我有以下字符串:正则表达式错误preg_replace_callback():未知修饰符'。'在

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

IM试图取代与功能的中间代码:“codeParser”的正则表达式是:

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

,但得到这个错误:

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

@Ashish我很高兴这只是一个评论,而不是一个答案:P – AD7six

+0

既然定界符问题已经解决了,那么让我们来讨论一下这些概念。 ''/ #\$##(.*?)##\$#/''与您的正则表达式所做的相同,但效率更高。捕获组允许你直接访问'Code'值(通过'$ matches [1]'),所以你不必在单独的步骤中去除周围的东西。 –

回答

7

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

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

(我也很肯定的#不需要进行转义,除非你使用它们作为分隔符)

编辑:您需要\\正确逃避双引号的$

+0

错误消失了,但它仍然没有调用函数,在其正常工作的在线正则表达式中,也许preg_replace_callback对PHP 4.39没有好处? – Mike

+1

附加说明:您可以使用'('作为起始分隔符,但结尾分隔符需要''''''。如果你这样做,表达式就是'(?=#\ $ ##)'和'。*?(?<= ## \ $#)'成为标志/修饰符。因此错误。 –

+0

@ÁlvaroG.Vicario是正确的,我想你也可以同样的方式使用'[]'和'{}'作为分隔符。 –

相关问题