2017-07-25 29 views
1

的开始,我有一个正则表达式解析GCC编译输出:正则表达式:如何删除路径

^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$ 

第一子表达 - ^(..[^:]*)标记发生错误的文件。

例如,对于该输入:

main.c:1156:13: error: invalid storage class 

这将标志着

main.c 

和此输入:

folder/main.c:1156:13: error: invalid storage class 

这将标志着

folder/main.c 

如何更改第一个子表达式以仅标记没有完整路径的文件名?

回答

1

我建议更换(..[^:]*)(?:[^\r\n:]*/)?([^:\r\n]*)

^(?:[^\r\n:]*/)?([^:\r\n]*):([0-9]+):?([0-9]+)?:? (.*)$ 
^^^^^^^^^^^^^^^^^^^^^^^^^^ 

参见regex demo

变化部分匹配:

  • (?:[^\r\n:]*/)? - 1或0的出现:
    • [^\r\n:]* - 零个或多个字符比:,CR和LF其他然后
    • / - 一个/
  • ([^:\r\n]*) - 第1组:零个或多个字符比:,CR和LF
其他