addlink(str)是一个自定义的函数,有返回值preg_replace("/[\s]*([a-zA-Z_][a-zA-Z0-9_]*)[\s]*/m",addlink("\\1"),$pagecontent);失败 会解析成addlink(\1)
preg_replace("/[\s]*([a-zA-Z_][a-zA-Z0-9_]*)[\s]*/m","addlink(\\1)",$pagecontent);失败 会解析成‘addlink(\\1)’
preg_replace("/[\s]*([a-zA-Z_][a-zA-Z0-9_]*)[\s]*/m",addlink({\\1}),$pagecontent);可以 会解析成addlink({\\1})
但是会加上两个{ }
请问怎样才能解析为addlink(\\1)  既使用匹配字符来当做参数调用addlink函数,返回addlink的值?

解决方案 »

  1.   

    preg_replace("/[\s]*([a-zA-Z_][a-zA-Z0-9_]*)[\s]*/m","addlink('\\1')",$pagecontent)
      

  2.   

    preg_replace("/[\s]*([a-zA-Z_][a-zA-Z0-9_]*)[\s]*/me","addlink('\\1')",$pagecontent);注意的两个地方
    1 正则表达式要加修正符e
    2 要用""将自定义函数括起来
      

  3.   

    e 如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。
      

  4.   

    csdn不能修改,NN的挺烦的.
    你也可以用preg_replace_callback这个相对好理解点.
      

  5.   

    见4楼回帖,只针对preg_replace一个函数.
      

  6.   

    呃,lz竟然没加e,没注意。手册有例子阿。