regexp:如何删除路径的开头

时间:2017-07-25 10:22:46

标签: regex sublimetext3

我有一个解析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 个答案:

答案 0 :(得分: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以外的零个或多个字符