我正在为我的项目编写一些构建脚本。我想要一个正则表达式模式,它可以匹配特定单词之前的所有内容。例如:我的脚本看起来像这样
Create Table ABC(
id int(50)
)
--//@UNDO
Drop table ABC
我想使用nant regex task匹配 --//@UNDO 之前的所有内容。我该如何实施?
如果文件中不存在 --//@UNDO,我还希望它匹配文件中的所有内容。我没有办法解决
我正在为我的项目编写一些构建脚本。我想要一个正则表达式模式,它可以匹配特定单词之前的所有内容。例如:我的脚本看起来像这样
Create Table ABC(
id int(50)
)
--//@UNDO
Drop table ABC
我想使用nant regex task匹配 --//@UNDO 之前的所有内容。我该如何实施?
如果文件中不存在 --//@UNDO,我还希望它匹配文件中的所有内容。我没有办法解决
这将是 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
这就是我最终做的
<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 的索引。并且根据它的存在,我正在做一个选择..解决了这个问题
This is the pattern:
(?'str'.*?)--//@UNDO
The result will be in str.
如果您只想匹配字符串之前的文本(而不是字符串本身),则需要使用前瞻。
.*?(?=--//@UNDO)
需要指定 Singleline 仍然适用。