Как заменить текст на несколько строк, используя preg_replace
Привет, на странице 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);
Я что-то пропустил?
Ответы
Ответ 1
Если бы это был не HTML, я бы сказал вам использовать модификатор DOTALL, чтобы изменить значение .
from 'match все, кроме новой строки 'to' match all ':
preg_replace('/(.*)<\/div>/s','abc',$body);
Но это HTML, поэтому вместо этого используйте парсер HTML.
Ответ 2
это флаг s, он позволяет. для захвата новых строк
Ответ 3
Можно использовать регулярное выражение для выделения фрагментов 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);
Из опыта запустите пользовательские теги в новой строке. Несомненно, взлом, но может помочь кому-то.