2010-11-14 126 views
3

content.tplPHP的preg_match问题

tratata 'hey' tratata <br/> 
okay 'aaaaa' <br/> 
'trtata' <br/> 
echo 'tratata'hmmmm'traatata'; 
'hello' tratata <br/> 

如何改变只在回声所有的报价?

我需要

tratata 'hey' tratata <br/> 
okay 'aaaaa' <br/> 
'trtata' <br/> 
echo 'tratata\'hmmmm\'traatata'; 
'hello' tratata <br/> 

谢谢

+0

我没有丝毫的线索你在问什么。你能举一个真实世界的例子吗? – lonesomeday 2010-11-14 15:02:39

+0

@lonesomeday:我很清楚。 – 2010-11-14 15:05:15

+0

@Vincent很高兴听到它!我明白了基本点,但我不明白这个例子,这非常糟糕 - 这个转义的目的是什么? – lonesomeday 2010-11-14 15:07:48

回答

3

这是一个回调很简单:

$var = preg_replace_callback("`(?<=echo ')(.+)(?=';)`iU", function ($matches) { return addslashes($matches[1]); }, $var) 

首先,我们回声带引号的字符串(没有别的)匹配,那么我们应用对我们发现的东西的addslashes功能。 ungreedy(U)选项很重要,因此。+不匹配整个字符串。