2011-01-12 6 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, почему бы не использовать парсер, такие как [SimpleXML] (HTTP : //php.net/manual/en/book.simplexml.php)? – Kevin

ответ

1

Сначала я думаю, что вы могли бы использовать регулярное выражение, или просто сочетание подстроки & StrPos к отделите <... />

Вы можете использовать strstr, чтобы определить, если my="t" появляется в строке или нет, а затем выполните активировать действие.

На самом деле, я считаю, что нарушение вашей задачи на более мелкие задачи проще и проще рефакторировать, чем пытаться получить все одним выстрелом с магическим регулярным выражением.

+0

+1 но я думаю, что ваш ответ отсутствует. Как разделить строку на несколько '< />'? – park

+0

петля через строку, сначала найдите strpos "/>", затем используйте substr, чтобы вырезать ее. –

+0

@park: вы можете взглянуть на мой быстрый код здесь: http://codepad.org/Dyk0VhKz. Вам все равно нужно вставить цикл while, чтобы определить позицию «/>» несколько раз. –

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 /> 
Смежные вопросы