正则表达式解析http头及html
最近需要自己实现解析http协议,获取html标签内容等操作。感觉正则表达式基本能够完成这个任务,不过我对正则表达式的掌握还停留在这个水平:
不得已,先提升一下对正则表达式的掌控吧。由于用的是deelx,所有首先就是DEELX 正则表达式语法,看了之后觉得有所顿悟,可以理解<(?
首先找注释里的内容很简单,。这时候找注释里的
标签时,很容易想到[\s\S]*?__>。可稍微再想想,这还是有问题的,前后都有注释时,也能匹配到。注释里的标签必须满足前面有之间没有__>。已经能确保出现注释开头了,只要排除一下注释结尾即可。然后改成了这个样子:()[\s\S])*?)
试了一下,果然能找到注释里的head了。那否定一下,就是非注释里的head了呗:(?).)*?)。这种写法每找一个位置就先看看是不是再注释里,感觉上比较浪费性能,于是弄成先找,再看是否再注释里,所以最终版就是(?).)*?)。这两种写法里环视中((?!__>).)*?匹配到的内容是不一样的。这也就是说,要排除注释中的标签,只要加一个(?).)*?)即可。所以<(?
<(?
这里面环视中使用重复量词貌似就deelx支持,大部分正则引擎都不太支持。不过正好我用的就是deelx。
标签问题解决了就是解析http协议头里的数据了,相对来说简单点:
http/\d\.\d\s(\d{0,3})\s\w+(?:\n(?:(?:content-type:\s([^\n]+))|(?:set-cookie:\s([^\n]+))|[^\n]+))*(?:\n\n([\s\S]*))?
试了一下,匹配结果如下:
这里想要获得什么字段值就继续往里|上就行,想要方便了还可以命个名。排除注释
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
