Привет, у меня есть следующий контент на странице html, который растягивает несколько строк
<div class="c-fc c-bc" id="content"> <span class="content-heading c-hc">Heading 1 </span><br /> The Home Page must provide a introduction to the services provided.<br /> <br /> <span class="c-sc">Sub Heading</span><br /> The Home Page must provide a introduction to the services provided.<br /> <br /> <span class="c-sc">Sub Heading</span><br /> The Home Page must provide a introduction to the services provided.<br /> </div>
Мне нужно заменить everthing между <div class="c-fc c-bc" id="content">
и </div>
с помощью настраиваемого текста
Для этого я использую следующий код, но он не хочет работать, если он несколько строк, но работает, если evertinh находится в одной строке
$body = file_get_contents('../../templates/'.$val['url']); $body = preg_replace('/<div class=\"c\-fc c\-bc\" id=\"content\">(.*)<\/div>/','<div class="c-fc c-bc" id="content">abc</div>',$body);
Я что-то упускаю?
Если это не HTML, я бы сказал вам использовать модификатор DOTALL , чтобы изменить значение .
from 'match all except new line' to 'everything all':
preg_replace('/(.*)<\/div>/s','abc',$body);
Но это HTML, поэтому вместо этого используйте парсер HTML.
это флаг «s», он позволяет. захватить новые строки
Можно использовать регулярное выражение, чтобы вырезать фрагменты html-данных, но вам нужно обернуть html пользовательскими тегами html, которые игнорируются браузерами. Например:
<?php $html=' <div>This will be shown</div> <custom650 rel="nofollow"> <p class="subformedit"> <a href="#" class="mylink">Link</a> <div class="morestuff"> ... more html in here ... </div> </p> </custom650> <div>This will also be shown</div> ';
Чтобы разбить теги атрибутами rel = "nofollow", вы можете использовать следующее регулярное выражение:
$newhtml = preg_replace('/<([^\s]+)[^>]*rel="nofollow"[^>]*>.*?<\/\1>/si', '', $html);
По опыту запустите пользовательские теги на новой строке. Несомненно, взлом, но может помочь кому-то.