问题如下:我有一个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
它可能没有什么太复杂的东西,但我没有遇到正确的正则表达式,该表达式只会解析链接并从中提取正确的数据。提前谢谢。
鉴于您提供的输入,这应该有效。它的工作原理是捕获句点和右大括号之间的文本:
.([A-Za-zd_]+)(?=})(?:.+.([A-Za-zd_]+)(?=}))*
这将返回两个捕获的组1
和2
。为了使逗号替换正常工作,您必须检查2
中是否有任何内容。如果是这样,请在 1
和 2
之间插入逗号。
解释:
.([A-Za-zd_]+)(?=}) # 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-zd_]+)(?=}) # ... you find the same thing as in the first line above
)* # make the non-capturing group optional
该正则表达式。
{@link[ .[a-zA-Z].[a-zA-Z]。[a-zA-Z].([A-Z-a-z0-9])}