2

在 sed/egrep 样式的正则表达式中,只有当其中一个组匹配时,才可以在替换字符串中打印一个字符?

例如,假设我有一个表达式,例如:

/^func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\1.\2/

只有当组 \1 匹配时,是否可以打印替换中的句点?

具体来说,我正在尝试为http://ctags.sourceforge.net/ctags.html--regex-<LANG>中描述的选项编写一个表达式

4

1 回答 1

2

我唯一能想到的是两个替换命令:

/^func[ \t]+([a-zA-Z0-9_]+)/\1/
/^func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\1.\2/

文档ctags建议通过简单地指定两个--regex-<LANG>选项来支持这一点:

此选项定义的正则表达式将添加到指定语言的当前正则表达式列表中,除非省略该参数,在这种情况下,当前列表将被清除。

在 Perl 中,您可以在组匹配上调用任意函数,但这在这里没有帮助。

于 2013-07-02T20:14:37.917 回答