PHP preg_match_all在二进制数据上失败

时间:2019-02-25 14:43:22

标签: php regex

我正在尝试使用preg_match_all在pdf文件中查找所有对象。我使用以下正则表达式,该表达式返回700个我知道存在的匹配项中的2个:

mixins.ListModelMixin

在python中可以使用相同的正则表达式,但是如果使用PHP进行匹配,则在Windows和Linux上这似乎失败。这只是一个错误,还是我需要使用一些我不知道的标志?

1 个答案:

答案 0 :(得分:0)

问题似乎与文件中流的大小有关。当我读取包含file_get_contents的文件并在其上运行preg_match_all时,我从preg_match得到回溯限制错误,但是当我从notepad ++复制文本并粘贴到提供相同正则表达式的Web表单中时,却没有。原来,当我粘贴它时,它读为UTF8,因此字符更少,因此我没有达到回溯限制。流的大小刚好足以用作UTF8,但我会遇到稍长的ANSI文本的回溯限制。

最终,我最终将正则表达式更改为仅搜索对象的开始,然后使用strpos查找结束。事实证明,这是比([0-9] + [0-9] +)obj(。*?)endobj

更为有效的方法。