gpt4 book ai didi

php - 用于捕获最小组的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-31 21:22:07 26 4
gpt4 key购买 nike

我正在尝试为 PDF Page 对象捕获一个 ID,如下所示:

4 0 obj
<<
/Type /Page /
...
>>
endobj

ID 是这个'ID 0 obj'。问题是我的文件有多个对象,因此以下模式从第一个对象声明捕获到 Page 对象的第一个实例:

preg_match_all("/([0-9]+) 0 obj.+?\/Page[ \n]*?\//s", $input_lines, output_array);

如果您想尝试一下,这是我的文件示例,您会看到包含单词“Page”的多个对象:

%PDF-1.3
%¦¦¦¦

1 0 obj
<<
/Type /Catalog /AcroForm << /Fields [12 0 R 13 0 R] /NeedAppearances false /SigFlags 3 /Version /1.7 /Pages 3 0 R /Names << >> /ViewerPreferences << /Direction /L2R >> /PageLayout /SinglePage /PageMode /UseNone /OpenAction [0 0 R /FitH null] /DR << /Font << /F1 14 0 R >> >> /DA (/F1 0 Tf 0 g) /Q 0 >> /Perms << /DocMDP 11 0 R >>
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj

2 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj

3 0 obj
<<
/Type /Pages
/Count 2
/Kids [ 4 0 R 6 0 R ]
>>
endobj

4 0 obj
<<
/Type /Page
/Parent 3 0 R
/Resources <<
/Font <<
/F1 9 0 R
>>
/ProcSet 8 0 R
>>
/MediaBox [0 0 612.0000 792.0000]
/Contents 5 0 R
>>
endobj

5 0 obj
<< /Length 1074 >>
stream
2 J
BT
0 0 0 rg
/F1 0027 Tf
57.3750 722.2800 Td
( A Simple PDF File ) Tj
ET
BT
/F1 0010 Tf

我应该改变什么让它不贪心?

编辑:澄清

  • 我忘了说我需要捕获所有的Page 对象ID。
  • 正如一些人告诉我使用更具体的正则表达式,我不得不说这不是对象构建方式的正式示例,而这个也是可能的。您可以看到空格不是必须的,并且在 Page '/Type/Page' 标签之前可以有多个标签。

示例:

4 0 obj
<< /UselessTag/Type/Page/
...
>>
endobj
  • 有名为 PagesPageLayoutSiglePage 的标签,我不想捕获它们。

最佳答案

你可以使用

'~^(\d+) 0 obj(?:(?!^\d+ 0 obj$).)*?\/Type\s*\/Page\s.*?endobj$~sm'

参见 regex demo

详细信息:

  • ^ - 行 anchor 的开始(因为 m 修饰符使 ^ 匹配行的开始而不是整个字符串)
  • (\d+) 0 obj - 1 个或多个数字(捕获到第 1 组),然后是空格、0、空格和一个 obj 子串
  • (?:(?!^\d+ 0 obj$).)*? - tempered greedy token匹配任何不以 ^\d+ 0 obj$ 模式开始的字符 (.),尽可能少的次数
  • \/Type\s*\/Page\s - /Type,0+ 个空格(将 \s 替换为 \h 只匹配水平空格),/Page 然后是一个空格
  • .*? - 在
  • 第一次出现之前尽可能少的任何 0+ 个字符
  • endobj - endobj 后跟...
  • $ - 行尾位置。

关于php - 用于捕获最小组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45058877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com