2011-01-12 57 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 />