2009-12-29 55 views
0

我有一些文字,像這樣:的preg_replace或str_replace函數

Paragraphs of text 
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT) 
Some additional paragraphs of text 

我要的是保持未知文本,但擺脫(一些已知TEXT)的(SOME其他已知文本)

我認爲preg_replace函數會給我我想要的,但我需要的正則表達式替換此:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT) 

與這個..

Unknown Text 

我看到的preg_replace需要3參數正則表達式,替換文字受試者

有沒有辦法未知文本的值傳遞給替換文本參數,或者,一個方法來reaplce左,右件(一些已知的文字)(其他一些KNOW TEXT)而不刪除未知文本?或者,有沒有一個str_replace()解決方案呢?

感謝

--- UPDATE ---

的(有些已知的文本)件可能存在在文本其他地方,但我不希望它刪除,除非它遵循(某些已知文本)未知文本(某些其他已知文本)。我在想,最初的str_replace建議不會因此而起作用。

回答

4

有什麼條件?如果您有:

(其它一些已知的文本)未知文本(一些已知的文字)

(即如果包圍文本交換),你還是想刪除它?必須將已知文本始終保存在行首或末尾?如果答案是肯定的,你最好使用正則表達式。事情是這樣的:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text); 

反斜槓(\)是爲了躲避()字符,在正則表達式有特殊的意義。我假設你想改變內容 - 你可以在那個時候刪除它們。

在這個正則表達式中,.是一個特殊的操作符,意思是「任何字符」。它會匹配任何字符。 +表示「一個或多個」,並且是前一個操作符的修飾符 - 它們可以一起解釋爲匹配「一個或多個任何字符」。 ()字符用於捕獲subpattern中的文本部分。通過在括號中包含.+,我們捕獲這個以用於替換。由()包圍的第一部分被正則表達式引擎標記爲$1。如果我們有更多,他們將被標記爲$2$3,依此類推。

如果這些都不適用,您可以使用其他答案中提到的str_replace函數。

+0

它的工作原理!你能解釋1美元是如何填充我想保留的物品的嗎? – OneNerd 2009-12-29 16:00:33

+0

它可以工作,但性能較差,所以如果兩個不需要的項目在字符串中的其他地方,請確保*不*要*結果。 – Matchu 2009-12-29 16:09:23

+0

@OneNerd:我已經將信息添加到答案中,以及關於'.'和'+'運算符的更多信息的鏈接。 – 2009-12-29 16:38:40

2

如果兩個文本確實是已知的,你可以這樣做:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)'); 

比正則表達式的性能更好。第一個參數是要替換的一組鍵,第二個參數是要替換的參數,第三個參數是主題。

3

你可以簡單地提供str_replace函數與要刪除這樣的字符串數組:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString); 

如果你不需要任何巧妙的模式匹配,這將是比正則表達式更快的解決方案。