我使用 https://github.com/smalot/pdfparser 及其 getText() 方法来解析包含文本(不是文本图像)的 PDF 文件的页面,但是当我尝试将正则表达式应用于这段文字不起作用。
我已经回显了包含提取文本的变量,一切似乎都正常,我复制了浏览器中显示的文本并将其存储在变量中,但是当我将这个新变量与包含原始文本的变量进行比较时,它们并不相同。有线索吗?
$parser = new Parser();
$pdf = $parser->parseFile($pdfFile);
$pages = $pdf->getPages();
foreach ($pages as $page) {
$fullPageText = $page->getText();
echo $fullPageText;
echo gettype($fullPageText); //Prints string
$copiedTextFromFullPageTextEcho = "...";
echo $fullPageText === $copiedTextFromFullPageTextEcho ? "Yes" : "No"; //Prints No
preg_match_all("/CANT\.\s+\S+\s+(.+?)\/.+\/(.+)-(.+)\s+(\d+)(\s+TOT AIS)?/", $fullPageText, $matches, PREG_SET_ORDER);
print_r($matches); //Prints Array ()
}
不确定 PDFParser 以哪种编码返回页面文本,今天遇到了同样的问题。 事实上,PDFParser 返回的字符串将与您从浏览器或文本文件打印和复制的字符串不同。
您必须在模式末尾添加 /u 标志才能兼容 UTF。 并且您必须将匹配模式括在方括号 [] 中,如下所示: $pattern = "/[付款 ID: .* 付款类型]/u";
它对我有用。
在你的代码中似乎是这样的 preg_match_all("/[CANT.\s+\S+\s+(.+?)/.+/(.+)-(.+)\s+(\d+)(\s+TOT AIS)?]/", $ fullPageText, $matches, PREG_SET_ORDER);