PHP RegEx和preg_match_all()问题

时间:2012-12-27 22:25:53

标签: php regex

我的文件中有错误:

    ================================================
    Header of file with date and time
    ================================================
    Loaded options from XML file: 'path/to/file/some_file.xml
    extendedPrintPDF started
    extendedPrintPDF: Error: Unsaved documents have no full name.; line: 332
    ================================================
    Header of file with date and time
    ================================================
    Error opening document: path/to/file/some_file1: Error: Either the file does not exist, you do not have permission, or the file may be in use by another application; line: 190
    Error opening document: path/to/file/some_file2: Error: Either the file does not exist, you do not have permission, or the file may be in use by another application; line: 190

我正在使用

 preg_match_all('/Error: (.*)/m', $file_data, $erroenames,PREG_PATTERN_ORDER);

获取数组中的所有错误。 它似乎适用于第一组中的错误。但是,以“错误打开文档”开头的第二组中的错误似乎显示为数组的SINGLE元素,因此,我只有4个数组而不是9个。但是,当我在{上尝试相同的事情时{3}},所有错误都显示为数组的不同元素,我得到9个元素。 有人可以告诉我我做错了什么吗? 我尝试使用|并为“错误打开文档”再创建一个RegEx。但是,即使这似乎也不起作用。

2 个答案:

答案 0 :(得分:0)

我怀疑第二组数据中行的末尾是\ r和/或\ n字符,因为,是的,这应该有效。尝试在十六进制编辑器中查看输出文件。

另一个想法是使用锚和非贪婪的*。

'/Error: (.*?)$/m'

答案 1 :(得分:0)

您可以尝试以下方法:

/error[^:]*: ([^:\n]+(?:line:\s*\d+)?)/i

这将会出现各种错误,并在下一行停止:或者行结束,然后回溯将启动,并在有任何

的情况下为您提供行号