php过滤p标签及属性,php正则匹配p标签及带特定的中文

<p>

第一章 什么什么

</p>

我想用php正则匹配到p标签还有文字内容。

说明一下情况,

1、p标签里面可能有回车、空格;

2、中文文字方面,“一”是会变的,“什么什么”也会变

我这么说吧。不用很复杂的道理,简单的几个用例就坑死你:

<p>

This is your text.

<p> This is a valid paragraph too, since HTML

<p> paragraph don't have to contain an explicit ending tag.

< p id = "sample" > This is another paragraph. </p >

<!-- <p> But this is a trap. </p> -->

<script type="text/javascript"> /* <p> And this is another trap. </p> */ </script>

</p>

正则文法在理论上,不足以表示标签之间的嵌套关系。形式文法中,正则文法是HTML的上下文无关文法的子集。即正则表达式的逻辑,理论上不足以表达HTML的文法结构。这一点请参考《编译原理》、《有限自动机与形式文法》这两门课程的相关知识。

而在实际应用中,正则更是不足(或极难)表达:

标签内部的空格和换行

标签的属性

不显式写出终止标签的情况

注释、脚本的影响

这个问题说了一遍又一遍:不要用正则解析HTML,请使用一个规范的解析器(Parser)。——在某些场合,针对特定的简易用例,用正则你高兴就好。但切记不要写出很复杂的正则表达式,更不要试图用正则去“无缺陷、普适的”匹配HTML,因为你迟早会失败。

PHP的HTML解析可以通过PHP原生的DOM模块(某些服务器环境下可能需要安装对应扩展),或者第三方HTML解析库来实现。

我现在遇到 1 个字符解析的问题。

你可以试试用正则表达式。

好的…… 现在我有 2 个问题了。

正则不好表达,用strpos匹配简单点

我来自问自答了,其实我要的是这样的

$s = preg_replace('/<p>.*(第.{0,8}章\s+[^<]*).*<\/p>/s',"随意$1",$s);

大概是这样,关键在于要用s修饰符忽略回车,不是题中说的中文的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值