标签: php regex
我坚持使用一块RegExp来检索PDF中嵌入的元数据标签中PDF的页数。
元数据如下所示:<</Metadata 1 0 R/Pages 5 0 R/Type/Catalog>>
<</Metadata 1 0 R/Pages 5 0 R/Type/Catalog>>
我需要<</Metadata之后的第一个数字,在这种情况下是1,但根据页数可能是100。
<</Metadata
1
我尝试将其中的字符串与(?=metadata).*(?=r\/pages)进行匹配,但是如果由于结尾(pages)字符串而导致某些PDF格式失败。
(?=metadata).*(?=r\/pages)
pages
答案 0 :(得分:1)
你的正则表达式匹配的文字太多,从metadata开始,但不包括r/pages,因为你在开头和结尾都有正面的预测。
metadata
r/pages
您需要使用匹配数字(或其等效的\d字符类)的[0-9]速记字符类。要匹配<<\/Metadata之后的第一个整数,您可以使用后视,或使用捕获组作为数字模式:
\d
[0-9]
<<\/Metadata
(?<=<<\/Metadata\s)\d+
见demo。或者将this one与捕获组一起使用(如果空白符号的数量可能多于一个,则更可取:)
<<\/Metadata\s+(\d+)