如何用正则按序匹配关键词提取PDF文档页数?
提取PDF页数的正则表达式解决方案
完全可以通过按顺序匹配/Type /Pages、中间任意内容、/Count后提取数字的思路来实现,这刚好能适配你给出的两种场景。
适配两种场景的正则表达式
/\/Type\s+\/Pages\s+(?:(?!>>).)*?\/Count\s+(\d+)/s
正则拆解(针对你的场景)
\/Type\s+\/Pages:精准匹配/Type /Pages,\s+兼容换行、空格、制表符等任意空白,适配不同PDF的排版格式(?:(?!>>).)*?:非贪婪匹配/Type /Pages到/Count之间的所有内容,但不会跨越PDF页面对象的闭合标记>>,避免误匹配其他区域的内容\/Count\s+(\d+):匹配/Count后的数字,(\d+)会将页数数字捕获为分组,直接提取即可/s修饰符:让正则中的.能匹配换行符,适配多行的PDF缓冲区内容
验证你的两个示例
- 第一个示例中,正则会匹配到
/Type /Pages后,跳过/Kids[4 0 R 8 0 R]前的内容,精准捕获/Count后的数字2 - 第二个示例中,会自动跳过中间的
/MediaBox [ 0 0 612 792 ]内容,捕获/Count后的数字22
额外提示
如果遇到部分PDF中/Count值是间接引用(比如/Count 3 0 R),可以把正则中的(\d+)调整为(\d+(?:\s+\d+\s+R)?),就能兼容这种情况,但针对你当前的场景,基础版本已经足够用。
内容的提问来源于stack exchange,提问作者RJK
相关产品推荐
相关产品推荐

