在sed / egrep风格的正则表达式中,只有当其中一个组匹配时才可以在替换字符串中打印字符吗?
例如,假设我有一个表达式,例如:
/^func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\1.\2/
仅当组\ 1匹配时才可以在替换中打印期间吗?
具体来说,我正在尝试为http://ctags.sourceforge.net/ctags.html
中描述的--regex-<LANG>
选项编写表达式
答案 0 :(得分:2)
我唯一能想到的是两个替换命令:
/^func[ \t]+([a-zA-Z0-9_]+)/\1/
/^func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\1.\2/
ctags
的{{3}}表示只需指定两个--regex-<LANG>
选项即可支持此功能:
除非省略该参数,否则此选项定义的正则表达式将添加到指定语言的当前正则表达式列表中,在这种情况下,将清除当前列表。
在Perl中,你可以在组匹配上调用任意函数,但这对此没有帮助。