我有一个解析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
如何更改第一个子表达式以仅标记没有完整路径的文件名?
答案 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以外的零个或多个字符