我尝试在filterchain ant-task中使用linecontainsregexp,通过构建regexp模式来保存唯一的服务器名称'act1'&现在财产保持这样的价值:
<Server name="act1" value="ServerName" port="1234"></Server>
如何获取单个属性名称?例如,如果我想获得端口#,如何检索它。我尝试过类似的东西:
<propertyregex property="extracted.prop" input="${server.details}"
regexp="(.*)\\ *@@" select="\1" />
谢谢。
答案 0 :(得分:1)
下面的代码应该可以提取三个属性中的每一个。首先,请注意我正在加载整个xml文件。没有必要像你一样提取特定的行。其次,我写它足够灵活,允许Server
属性中的换行符,并允许属性的任何顺序。
我看到你特别挣扎着正则表达式。为了您的理解,我将打破第一个正则表达式:
(?s) // DOTALL flag. Causes the . wildcard to match newlines.
\x3c // The < character. For reasons I don't understand, `propertyregex` doesn't allow <
Server // Match 'Server' literally
.*? // Reluctantly consume characters until...
name= // 'name=' is reached
" // Because ant is an XML file, we must use this escape sequence for "
(.*?) // Reluctantly grab all characters in a capturing group until...
" // another double quote is reached.
最后是XML:
<loadfile property="server.details" srcfile="${baseDir}/build/myTest.xml"/>
<propertyregex property="server.name"
input="${server.details}"
regexp="(?s)\x3cServer.*?name="(.*?)""
select="\1" />
<propertyregex property="server.value"
input="${server.details}"
regexp="(?s)\x3cServer.*?value="(.*?)""
select="\1" />
<propertyregex property="server.port"
input="${server.details}"
regexp="(?s)\x3cServer.*?port="(.*?)""
select="\1" />