У меня есть большой файл XML (около 2 Мб) и необходимо заменить все флажки и радио с моей дополнительной строкой =><i></i>
preg_match_all и preg_replace в PHP
например
<input type="checkbox" />
заменить
<input type="checkbox" /><i></i>
код:
$file = 'style.xml';
$c = file_get_contents($file);
preg_match_all("#<input.*type=\"(checkbox|radio)\".+? />#i", $c, $m);
if($m)
{
for($i = 0; $i < count($m[0]); $i++)
{
/*$search = trim($m[0][$i]);
$replace = "$search<i></i>";*/
$c = preg_replace("#" . preg_quote($m[0][$i], "#") . "#i", $m[0][$i] . '<i></i>', $c);
}
}
if($fp = @fopen('new-style.xml', 'w'))
{
@flock($fp, 2);
@fputs($fp, $c);
@flock($fp, 3);
@fclose($fp);
}
это работает, но иногда заменяет более одного "I" тега
например
<input type="checkbox" /><i></i><i></i><i></i><i></i>
<input type="radio" /><i></i><i></i><i></i>
моего регулярным выражение является неправильным? или что-то другое? Как сделать замену только один раз для строки?
скриншот здесь image
Использовать XML-парсер. –
Некоторые из этих флажков/радиовходов присутствуют более одного раза? – RST
Возможно, вы захотите рассмотреть [DOMDocument] (http://php.net/manual/en/class.domdocument.php). – PHPglue