Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何解析手写笔错误消息输出_Regex_Stylus - Fatal编程技术网

Regex 如何解析手写笔错误消息输出

Regex 如何解析手写笔错误消息输出,regex,stylus,Regex,Stylus,我试图解析二进制文件生成的错误消息,例如,以下示例错误: 我基本上是在得到文件名、行和列以及最后的错误消息之后。由于似乎没有控制输出详细程度的选项,因此我需要忽略所有以空格(后跟数字)或破折号开头的行 以下是我目前拥有的:*错误:(.+):(\d+):(\d+)\n(?:\W++.\n)+(.*\n) 虽然这可能不是理想的模式,但真正的问题是手写笔可能会输出多条线,从而破坏模式 illegal unary "==", missing left-hand operand at Parse

我试图解析二进制文件生成的错误消息,例如,以下示例错误:

我基本上是在得到文件名、行和列以及最后的错误消息之后。由于似乎没有控制输出详细程度的选项,因此我需要忽略所有以空格(后跟数字)或破折号开头的行

以下是我目前拥有的:
*错误:(.+):(\d+):(\d+)\n(?:\W++.\n)+(.*\n)

虽然这可能不是理想的模式,但真正的问题是手写笔可能会输出多条线,从而破坏模式

illegal unary "==", missing left-hand operand

    at Parser.error (/usr/local/lib/node_modules/stylus/lib/parser.js:259:11)
    at Parser.equality (/usr/local/lib/node_modules/stylus/lib/parser.js:1905:23)
    at Parser.typecheck (/usr/local/lib/node_modules/stylus/lib/parser.js:1886:21)
    at Parser.logical (/usr/local/lib/node_modules/stylus/lib/parser.js:1873:21)
    at Parser.ternary (/usr/local/lib/node_modules/stylus/lib/parser.js:1857:21)
    at Parser.negation (/usr/local/lib/node_modules/stylus/lib/parser.js:1849:17)
    at Parser.expression (/usr/local/lib/node_modules/stylus/lib/parser.js:1828:24)
    at Parser.stmt (/usr/local/lib/node_modules/stylus/lib/parser.js:818:25)
    at Parser.statement (/usr/local/lib/node_modules/stylus/lib/parser.js:685:21)
    at Parser.block (/usr/local/lib/node_modules/stylus/lib/parser.js:865:21)
上面的模式将正确捕获文件名、行和列,但始终使用错误日志中的最后一行,而不是我要查找的错误消息


如何可靠地捕获错误消息?

利用此特定的输出结构,您可以使用编号代码行之后的单个换行符:
(?:\n)+

那么你有:

((.*Error): (.+):(\d+):(\d+))\n(?:\ +.*\n)+(?:\n)+(.*)
说明:
示例:

在第一个代码块中,每一行都以多个空格开头,除了虚线,虚线正好有一个空格。对所有输出都是这样吗?是的,但除非错误出现在最后一行,否则虚线后可能会有更多的线遵循虚线前的模式。在这种情况下,您可以只匹配换行符,我在下面的答案中已经这样做了。
((.*Error): (.+):(\d+):(\d+))\n(?:\ +.*\n)+(?:\n)+(.*)
# First line with matching error, file name, line, column
((.*Error): (.+):(\d+):(\d+))\n   

# Non-matching group for lines starting with whitespace and multiple characters after
(?:\ +.*\n)+                      

# Non-matching group for at least one newline
(?:\n)+                           

# Lastly, match single line at the end
(.*)