我有一些Java代码

@Subscribe
public void catchEvent(SomeEvent

我想将它与〜/ .ctags中的类似内容进行匹配
--langdef=javaspring
--langmap=javaspring:.java
--regex-javaspring=/@Subscribe(\s)*([a-z ]+)\s([a-zA-Z]*)\(([a-zA-Z]*)/\3-\4/

这应该生成类似“catchEvent-SomeEvent”的内容,但不会。如果我删除@Subscribe和public void之间的换行符,它将得到它。
@Subscribe public void catchEvent(SomeEvent

rm -rf tags && ctags -R . && cat tags|grep Subs
catchEvent-SomeEvent    PathToMyFile.java    /^@Subscribe public void catchEvent(SomeEvent event) {$/;"      r

我什至尝试使用这样的行的开始/结束
--regex-javaspring=/^\s*@Subscribe[a-z \s]+\s([a-zA-Z]+)\(([a-zA-Z]+).*$/@Subscribe \1 \2*/

您是否知道我可以使用当前的ctag实现来做到这一点。我是在做错什么还是ctags现在不支持多行正则表达式。

谢谢!

最佳答案

使用_multiline = N

[jet@localhost ~]$ cat foo.java
@Subscribe
public void catchEvent(SomeEvent

[jet@localhost ~]$ cat s.ctags
--langdef=javaspring
--langmap=javaspring:.java
--regex-javaspring=/@Subscribe(\s)*([a-z ]+)\s([a-zA-Z]*)\(([a-zA-Z]*)/\3-\4/{_multiline=2}

[jet@localhost ~]$ ~/var/ctags/ctags --options=./s.ctags --language-force=javaspring  -o - foo.java
catchEvent-SomeEvent    foo.java    /^public void catchEvent(SomeEvent$/;"  r

关于regex - CTAG的多行正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28262647/

10-11 16:07