2011-01-12 58 views
2

我試圖對此字符串執行字符串操作。我有一個算法,但不知道PHP的語法。如何在進行這些修改時複製此字符串

<who not="p" what="v" /> 
<cares i="n" want="m" /> 
<target my="t" what="iwant" /> 

每個開始和結束對</>之間,串my="t"可以或可以不存在(在此示例中只存在於第三行)。如果它不存在,我想按原樣複製整個< />。如果存在,我想在它後面加上<something />。所以我想這個字符串看起來像這樣

<who not="p" what="v" /> 
<cares i="n" want="m" /> 
<target my="t" what="iwant" /><something /> 

什麼情況複雜化的是,my="t"似乎沒有一個標準的位置,也可能是< />之間的任何地方。任何建議如何使用PHP做到這一點?我想正則表達式

+0

,因爲它看起來像你使用XML,爲什麼不使用XML解析器,如[的SimpleXML(HTTP ://php.net/manual/en/book.simplexml.php)? – Kevin 2011-01-12 04:39:57

回答

1

首先我認爲你可以使用正則表達式,或者乾脆SUBSTR的組合& strpos到單獨的<... />

您可以使用strstr,以確定是否my="t"在字符串中出現與否,然後執行適當的行動。實際上,我認爲把你的任務分解成更小的任務,比重複一個魔法正則表達式更簡單,更容易重構。

+0

+1,但我認爲你的答案缺少一件。如何將字符串分成多個'< />`?通過字符串循環訪問 – park 2011-01-12 04:53:05

1

有一試:

$l = array('<who not="p" what="v" />','<cares i="n" want="m" />','<target my="t" what="iwant" />'); 

foreach ($l as $str) { 
    $str = preg_replace('#(<.*?my="t".*? />)#', "$1<something />", $str); 
    echo $str,"\n"; 
} 

輸出:

<who not="p" what="v" /> 
<cares i="n" want="m" /> 
<target my="t" what="iwant" /><something />