我正在为我的项目编写一些构建脚本。我想要一个正则表达式模式,可以匹配特定单词之前的所有内容。例如:我的脚本看起来像这样
Create Table ABC(
id int(50)
)
--//@UNDO
Drop table ABC
我想在之前匹配所有内容 - // @ UNDO使用nant regex task。我该如何实现呢?
如果 - @ @ UNDO不存在于文件中,我还希望它匹配文件中的所有内容。我没有办法解决问题
答案 0 :(得分:0)
这是模式:
(?'str'.*?)--//@UNDO
结果将在str。
答案 1 :(得分:0)
如果您只想匹配字符串之前的文本(而不是字符串本身),则需要使用前瞻。
.*?(?=--//@UNDO)
需要指定单行仍然适用。
答案 2 :(得分:0)
这将是NAnt的目标:
<target name="go">
<loadfile
file="C:\foo\bar.sql"
property="content" />
<regex
pattern="(?'content'.*)--//@UNDO"
input="${content}"
options="Singleline"
failonerror="false" />
<echo message="${content}" />
</target>
请注意,如果文件中不存在content
,则预设属性--//@UNDO
时会显示完整的文件内容。
答案 3 :(得分:0)
这就是我最终做的事情
<loadfile file="${filePathAndName}" property="file.contents" />
<property name="fileHasUndo" value="${string::index-of(file.contents, '--//@UNDO')}" />
<choose>
<when test="${fileHasUndo == '-1' }">
<echo file="${file}" append="true" message="${file.contents}" />
</when>
<otherwise>
<regex pattern="(?'sql'[\s\S]*)--\/\/@UNDO[\s\S]*" input="${file.contents}" options="Multiline"/>
<echo file="${file}" append="true" message="${sql}" />
</otherwise>
</choose>
我找到了索引 - // @ UNDO。并且取决于它的存在我正在做什么选择..解决问题