записывает значение в «пустой тег» на PHP

У меня есть письменный скрипт, который ищет каждый id = в .html-файле.

PHP:

<?php $html = file_exists('test.html') ? file_get_contents('test.html') : die('unable to open the file'); $data['test'] = 'WRITE 1'; $data['test2'] = 'WRITE 2'; foreach ($data as $search => $value) { $html = preg_match('%<[^>]*id="'.$search.'"[^>]*>([^<]*)</[^>]*>%', $html, $match) ? str_replace($match[1],$value,$html) : false; } echo $html; ?> 

HTML:

 <html> <head> <title>TRY</title> </head> <body> <div id="test">A</div> <div id="test2"></div> <div id="test3">C</div> </body> </html> 

проблема заключается в том, что он пишет только теги, которые не являются пустыми, но на пустой тег, например id = test2, он выгружается и не будет писать никаких значений. Кто-нибудь может мне помочь, как писать «пустые теги»?

выход выше:

 WRITE 1 C 

который он избежит пустых тегов, таких как id = "test2"

но мой желаемый результат:

 WRITE 1 WRITE 2 C 

Обновите заменяемую деталь:

 $html = preg_match('%<[^>]*(id="'.$search.'"[^>]*>)([^<]*)</[^>]*>%', $html, $match) ? str_replace($match[1] . $match[2], $match[1] . $value,$html) : false; 

Это заменит также часть тега, начиная с идентификатора. Таким образом, у вас никогда не будет пустой строки.