You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP regex提取PDF特定段落求助:匹配含多句号的目标段落

解决正则匹配右对齐段落的问题

嘿,我懂你的困扰!之前用句号当结束标记,结果段落里到处都是句号,刚匹配到第一句就停了,根本拿不到完整的目标内容对吧?

你的核心需求是提取所有以“AGRAVO DE EXCECUÇÃO PENAL”开头的右对齐段落,那咱们就得换个思路——别用句号当结束标志,而是利用段落的「开头特征」来界定范围,再结合右对齐的文本特征来精准匹配。

解决方案思路

右对齐的段落在PDF提取的文本里,通常会有一个明显特征:段落开头前有大量空白字符(空格、制表符),用来把文本推到右侧。同时,你的目标段落都是以固定字符串开头,所以我们可以用「正向预查」来匹配到下一个目标段落开头或者文本结尾的位置,这样就能完整捕获整个段落。

具体正则与PHP代码示例

正则表达式

/(^\s*AGRAVO DE EXCECUÇÃO PENAL.*?)(?=^\s*AGRAVO DE EXCECUÇÃO PENAL|$)/ms

代码实现

// 假设$pdfText是你从PDF中提取的完整文本字符串
$pdfText = "PODER JUDICIÁRIO TRIBUNAL DE JUSTIçA DO ESTADO DE SãO PAULO 13ª CâMARA DE DIREITO CRIMINAL AGRAVO DE EXECUçãO PENAL Nº 000000000000 - VOTO Nº 0000 2 VOTO Nº 00000 AGRAVO DE EXECUçãO PENAL Nº 0000000000000000000 AGRAVANTE: MINISTéRIO PúBLICO DO ESTADO DE SãO PAULO AGRAVADA: NAME AGRAVO DE EXECUÇÃO PENAL EXECUçãO CRIMINAL PLEITO DE MANUTENçãO DO CARáTER HEDIONDO DO CRIME DE TRáFICO PRIVILEGIADO, A FIM DE MODIFICAR OS CáLCULOS NOVO ENTENDIMENTO DO C. STF EXTERNADO NO JULGAMENTO DO HC Nº 118.533/MS, NO SENTIDO DE AFASTAR A NATUREZA HEDIONDA DO TRáFICO PRIVILEGIADO DE DROGAS DECISãO DO JUíZO EM CONSONâNCIA COM O ENTENDIMENTO ESPECíFICO DO PLENáRIO DO C. STF, QUE Há DE PREVALECER AGRAVO NãO PROVIDO. CUIDA-SE DE AGRAVO DE EXECUçãO PENAL INTERPOSTO PELO M IN IS T ÉR IO P Ú BLIC O D O E ST A DO D E S Ã O P A ULO CONTRA DECISãO PROFERIDA PELO JUíZO DO DEECRIM DA 6ª RAJ (COMARCA DE RIBEIRãO PRETO), QUE INDEFERIU PEDIDO DE RETIFICAçã";

// 匹配所有符合条件的段落
$pattern = '/(^\s*AGRAVO DE EXCECUÇÃO PENAL.*?)(?=^\s*AGRAVO DE EXCECUÇÃO PENAL|$)/ms';
preg_match_all($pattern, $pdfText, $matches);

// 输出结果
if (!empty($matches[1])) {
    echo "匹配到的段落:\n";
    foreach ($matches[1] as $index => $paragraph) {
        echo "第" . ($index + 1) . "段:\n" . trim($paragraph) . "\n\n";
    }
} else {
    echo "未匹配到符合条件的段落";
}

正则各部分说明

  • ^\s*:匹配行开头的任意空白字符(空格、制表符),对应右对齐段落的前置空白特征。
  • AGRAVO DE EXCECUÇÃO PENAL:你的目标段落固定开头标识。
  • .*?:非贪婪模式匹配任意字符,避免过度匹配到其他内容。
  • (?=^\s*AGRAVO DE EXCECUÇÃO PENAL|$):正向预查,匹配到下一个目标段落开头或者文本结尾的位置,确保只捕获当前完整段落。
  • /ms修饰符:m让^匹配每行的开头;s让.可以匹配换行符,处理跨多行的段落。

额外注意事项

  • 如果PDF提取的文本换行符不规范(比如用\r或\r\n),这个正则依然有效,因为\s已经包含了这些换行相关的空白字符。
  • 如果目标段落的结束标志不是下一个同开头段落,而是其他特定内容(比如某个固定标题),可以修改正向预查里的内容,比如(?=PODER JUDICIÁRIO|$)。
  • 测试时可以先用preg_match_all查看匹配结果,根据实际文本的格式微调正则细节。

内容的提问来源于stack exchange,提问作者henrique romao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:19:21