使用regex从Javadoc中提取Java类名

时间:2012-05-09 12:13:51

标签: regex ant

问题如下:我有一个Javadoc生成的HTML文件,其中包含Java类名和一些其他信息,如下所示:

{@link ml.foo.bar.BazAccEd} (Text) Some text
{@link ml.foo.bar.BazAccGrp} (Text) Some text BazAccGrpList
{@link ml.foo.bar.BazAccEdOrGroup} (Text) Some text {@link.ml.foo.bar.BazAccEdList}

我需要从它(使用Ant正则表达式功能)中提取Java类的简短名称,并且只在它们是链接的一部分的地方,插入逗号代替原始普通文本,以便上面的示例产生

BazAccEd
BazAccGrp
BazAccEdOrGroup, BazAccEdList

它可能不是太复杂但我没有遇到正确的正则表达式,它只解析链接并从中提取正确的数据。提前谢谢。

2 个答案:

答案 0 :(得分:3)

考虑到您提供的输入,这应该有效。它通过捕获句点和结束大括号之间的文本来工作:

\.([A-Za-z\d_]+)(?=})(?:.+\.([A-Za-z\d_]+)(?=}))*

这将返回两个已捕获的群组\1\2。为了让逗号替换正常工作,您必须检查\2中是否有任何内容。如果是,请在\1\2之间插入逗号。

说明:

\.([A-Za-z\d_]+)(?=}) # look for a period, characters, and lookahead for closing curly brace. Capture the characters
(?:          # open a non-capturing group
.+           # gobble up characters until ...
\.([A-Za-z\d_]+)(?=}) # ... you find the same thing as in the first line above
)*           # make the non-capturing group optional

答案 1 :(得分:1)

你可以使用那个正则表达式。

{@ link [。] [a-zA-Z] 。[a-zA-Z] 。[a-zA-Z] 。([AZa-z0-9 ] )}