我需要将href链接转换为不同类型的链接(Confluence有自己的系统),而且我正在使用带有replaceregexp的Ant build.xml文件,但还没有完全接近。
基本上我需要从这样的链接开始:
<a class="xref" href="../Test_Topic_2/Test_Topic_2.txt">Test Topic 2</a>
然后把它们变成这个:
<ac:link><ri:page ri:content-title="Test_Topic_2" /></ac:link>
我有一个适用于上述链接的Ant build.xml文件,但如果路径以../../而不是../
开头,它就不起作用由于获取主题名称的最佳位置来自'Test_Topic_2.txt'条目,我想知道是否有一种方法可以使用正则表达式从'.txt'向后工作,告诉它匹配来自的所有内容'.txt'回到它遇到的第一个斜线,将其留在原位,然后替换其余的。
可能有一些完全不同的方法,如果有任何想法请告诉我。
谢谢,
答案 0 :(得分:0)
假设文件input.txt
中的输入链接与构建文件位于同一路径上,并带有以下内容:
<a class="xref" href="../Test_Topic_1/Test_Topic_1.txt">Test Topic 1</a>
<a class="xref" href="../Test_Topic_2/Test_Topic_2.txt">Test Topic 2</a>
<a class="xref" href="../Test_Topic_3/Test_Topic_3.txt">Test Topic 3</a>
<a class="xref" href="../Test_Topic_4/Test_Topic_4.txt">Test Topic 4</a>
您可以将文件加载到属性中,然后遍历每一行并将其替换为更新的链接,将更新的链接保存在属性中并将其附加到输出文件,如下所示。
<loadfile property="file.content" srcFile="./input.txt" />
<for list="${file.content}" param="original.href" delimiter="${line.separator}">
<sequential>
<var name="updated.href" unset="true" />
<propertyregex input="@{original.href}" property="updated.href" regexp="<a class="xref" href=".+/([^/]+)\.txt">.+</a>"
replace="<ac:link><ri:page ri:content-title="\1" /></ac:link>" />
<echo message="${updated.href}${line.separator}" file="output.txt" append="true" />
</sequential>
</for>
这种情况下的输出是:
<ac:link><ri:page ri:content-title="Test_Topic_1" /></ac:link>
<ac:link><ri:page ri:content-title="Test_Topic_2" /></ac:link>
<ac:link><ri:page ri:content-title="Test_Topic_3" /></ac:link>
<ac:link><ri:page ri:content-title="Test_Topic_4" /></ac:link>
答案 1 :(得分:0)
<replaceregexp byline="true">
<regexp pattern="<a class=.*?href=".*?([^\/]+)\.txt">.*?<\/a>"/>
<substitution expression="<ac:link><ri:page ri:content-title="\1" \/><\/ac:link>"/>
<fileset dir="${your.directory.containing.txt.files}">
<include name="**/*.txt"/>
</fileset>
</replaceregexp>
此处,replaceregexp
将处理输入文件的每一行,将其与<regex pattern="..."/>
匹配,并将成功的匹配项替换为<substitution expression="..."/>
这将在 <{strong> <fileset>
中的每个文件中完成。
所以,例如,如果您有以下目录。结构:
../ a / b / 1.txt, 2.txt
../ a / b / c / 3.txt
然后将${your.directory.containing.txt.files}
设置为../a/b/
,然后按1.txt, 2.txt and 3.txt
逐行处理文件<replaceregexp>
,将替换每个匹配的表达式强>
请参阅Demo here。