您在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>
我需要使用自定义文字
替换<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);
我错过了什么吗?
答案 0 :(得分:24)
如果这不是HTML,我会告诉您使用DOTALL修饰符将.
的含义从'匹配除新行之外的所有内容'更改为'匹配所有内容':
preg_replace('/(.*)<\/div>/s','abc',$body);
但这是HTML,所以请改用HTML解析器。
答案 1 :(得分:15)
它是“s”标志,它启用。捕获换行符
答案 2 :(得分:0)
可以使用正则表达式去除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);
根据经验,在新行上启动自定义标记。毫无疑问是一个黑客,但可能会帮助别人。
答案 3 :(得分:0)
您还可以使用[\s\S]
代替.
与DOTALL标志s
结合使用,以便匹配每个人,因为[\s\S]
表示完全相同:匹配所有内容; \ s匹配所有空格字符(包括换行符)和\ S处理不是空格字符的所有内容(即其他所有内容)。在某些情况下/正则表达式的实现中,这比启用DOTALL
警告:.*
带有DOTALL标志以及[\s\S]
都是&#34;饥饿&#34;并且不会停止阅读字符串。如果您希望它们停在某个位置(例如第一个&lt; / div&gt; ),请使用量词后面的非贪婪运算符?
,例如.*?
答案 4 :(得分:0)
如何替换嵌套标签之间的文本,例如:
$sExample2 = "Test [DIV]again[/DIV]
d[COLOR=rgb(184, 49, 47)][SIZE=26px][B][U]o[/U][/B][/SIZE][/COLOR]ssed
This is not [DIV]true[/DIV] !
Yes it is [DIV]true [DIV]but[/DIV] just [/DIV] in that case!.
Why not [DIV]now
?[/DIV] Right here.
Because it is [DIV]down
[DIV]to the [/DIV][/DIV] botton.
I know but i want to [DIV]fly
[DIV]far[/DIV]
[/DIV] away.
";
我想用 * Help * 替换每个 DIV 元组,使结果看起来像
Test ** Test **
d[COLOR=rgb(184, 49, 47)][SIZE=26px][B][U]o[/U][/B][/SIZE][/COLOR]ssed
This is not ** Test ** !
Yes it is ** Test ** in that case!.
Why not ** Test **
Right here.
Because it is ** Test **
botton.
I know but i want to ** Test **
away.
我尝试了不同的替换,但从未收到过这样的结果。
print_r(preg_replace(
'#\[' . preg_quote('DIV', '#') . '](.*?)\[\/' . preg_quote('DIV', '#') . '\]#si',
'*** Test ***',
$sExample2
));
这个几乎是最好的,但不是我需要的。