2012-06-05 49 views
1

好,我已經更換了一大串的某些部分的東西開始,以PHP正則表達式結束

 $string = 'this <task>post</task> was a <post>post item</post> 
before but now this is now a <task>task item</task> 
and will become like <task>this one</task>'; 

     $pattern = '^<task>*</task>$'; 
     $datainmiddle = preg_replace($pattern, $replacement, $string); 
     $replacement = strlen(datainmid); 
     //I have no idea what to do next...(ノД`)・゜・。 

現在我想在這裏做的事情這下面的代碼是以下

  1. 我想抓住與<task>開始,以</task>
  2. 結束與各子我抓起字符串中的每個子,我想每一個數據搶在<task>和012的中間
  3. 在每一個數據我抓起我要測量其長度的標記的使用strlen的
  4. 現在我要替換所有以<task>開始,以</task>他們串在他們的中段長度結束串中間。

輸出必須是這樣的

這4是一個9之前,但現在這是現在9,將成爲像8

如果你感到十分困惑。請告訴它我

回答

1

好,很容易:

preg_replace('#<task>(.*?)</task>#e', "strlen('\\1')", $str); 

正則表達式使用(.*?)開始我後來用它來傳遞到strlen()內存模式。

我使用.*?表示非貪婪匹配(否則它匹配的</task>第一<task>和最後出現之間的一切

e改性劑用於第二個參數賦值爲preg_replace。這使得有可能在表達以前被作爲一個整體來返回字符串長度計算寫'\\1'

希望這種解釋有點幫助理解的解決方案。

+0

HAHAH比K你...但仍然正則表達式仍然令人困惑... –

+1

@Mahan我已經添加了一些解釋,請檢查 –

+0

哈哈謝謝^^。它對我來說已經很清楚了 –