Выберите тег из многострочного HTML-кода, используя preg_match_all - PullRequest
2 голосов
/ 19 сентября 2010

Я хочу использовать функцию php preg_match_all, чтобы найти часть HTML-кода и заменить ее другой.

Вот что мне нужно найти:

<attachfiles>
tag{link} attr{rel="stylesheet" type="text/css" media="screen"} 
sources{
file1.css,
file2.css
}
</attachfiles>

Я сделал регулярное выражение, которое находит его, но только если этот код присутствует один раз во всем HTML.

Мое регулярное выражение:

"|\<attachfiles\>(.*)\<\/attachfiles\>|s"

Проблема возникает, когда у меня есть код, чтобы найти повторяется два или более раз. Так как регулярное выражение использует оператор | s (многострочный), когда у меня есть код более одного раза, он возвращает весь HTML-код от самого первого до последнего изменения

Например:

<attachfiles>
tag{link} attr{rel="stylesheet" type="text/css" media="screen"} 
sources{
file1.css,
file2.css
}
</attachfiles>

... html code ...
... html code ...

<attachfiles>
tag{script} attr{type="text/css" language="javascript"} 
sources{
file1.js,
file2.js
}
</attachfiles>

Мое регулярное выражение в этом случае возвращает ВСЕ код, начиная с первого

<attachfiles> to the last </attachfiles> 

включая

... html code ... 
... html code ... 

между кодом, который я ищу.

1 Ответ

0 голосов
/ 19 сентября 2010

Используйте DOM и создайте new DOMDocument(), затем loadHTML($html) и выполните getElementsByTagName('attachfiles'), затем выполните итерацию по ->length с ->item(i), затем сделайте то, что вы хотите .. replaceChild или что-то еще.

...