问题如下:我有一个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
它可能不是太复杂但我没有遇到正确的正则表达式,它只解析链接并从中提取正确的数据。提前谢谢。
答案 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 ] )}