2011-11-02 31 views
1

我正在使用this UDF作爲MySQL中的PREG_REPLACE函數,並且一切似乎都工作正常。但是,我現在的目標是在列中查找和編碼pre標籤中的實體。所以,最後我想要得到這樣的:MySQL中的PREG_REPLACE和PREG_REPLACE_EVAL

<pre> 
    <strong>Hello World!</strong> 
</pre> 

看起來像這樣:

<pre> 
    &lt;strong&gt;Hello World!&lt;/strong&gt; 
</pre> 

我使用的preg_replace函數查找pre標籤這樣裏面的內容:

SELECT PREG_REPLACE('/<pre>(.*?)<\\/pre>/sm', '\\1', '<pre><strong>Hello World</strong></pre>'); 

現在我想用\\1來代替ENCODE_ENTITIES('\\1'),顯然它可以是其他函數,比如例如,但UPPER('\\1')並不多。我有點像在PHP的執行preg_replace的的PREG_REPLACE_EVAL想法,允許這樣的事情:

preg_replace("/(<\/?)(\w+)([^>]*>)/e", 
    "'\\1'.strtoupper('\\2').'\\3'", 
    $html_body); 

就如何落實在MySQL類似的任何想法?或者,也許我走錯了路?謝謝!

+1

你確定pre不會與其他pre元素嵌套嗎? – FailedDev

+0

@FailedDev是的,我很確定,至少在我的情況下,但你說得對,這是我們應該注意的事情。謝謝! – kovshenin

+0

你不能留意它。如果是這種情況,則正則表達式不適合執行此任務。如果您100%確定pre元素不包含其他pre元素,我可以爲您當前的問題提供解決方案。 – FailedDev

回答

1

除非您想修改UDF的源代碼以添加該功能,否則在MySQL中無法這樣做。我建議你選擇你最喜歡的編程語言,編寫一個程序來爲你做更新,或者確保在數據到達數據庫之前進行修改。