Я предлагаю использовать
'regex:/.*@(?:bournemouth\.ac\.uk|nhs\.(?:net|uk))/i'
Или
'regex:/@(?:bournemouth\.ac\.uk|nhs\.(?:net|uk))/i'
Подробности
@
- символ @
(?:bournemouth\.ac\.uk|nhs\.(?:net|uk))
- группа без захвата, соответствующая bournemouth\.ac\.uk
- строка bournemouth.ac.uk
|
- или nhs.
, за которым следуют net
или uk
. Обратите внимание, что буквенные точки экранированы, внутри шаблона между пробелами нет пробелов, а флаг i
устанавливается только в конце регулярного выражения.
Шаг 1 : Определите свойство в своем сценарии NAnt для отслеживания среды, которую Вы создаете для (локальный, тест, производство, и т.д.).
<property name="environment" value="local" />
Шаг 2 : Если у Вас уже нет конфигурации или цели инициализации, от которой зависят все цели, то создайте цель конфигурации и удостоверьтесь, что Ваши другие цели зависят от нее.
<target name="config">
<!-- configuration logic goes here -->
</target>
<target name="buildmyproject" depends="config">
<!-- this target builds your project, but runs the config target first -->
</target>
Шаг 3 : Обновите свою цель конфигурации для получения по запросу в соответствующем файле свойств на основе свойства среды.
<target name="config">
<property name="configFile" value="${environment}.config.xml" />
<if test="${file::exists(configFile)}">
<echo message="Loading ${configFile}..." />
<include buildfile="${configFile}" />
</if>
<if test="${not file::exists(configFile) and environment != 'local'}">
<fail message="Configuration file '${configFile}' could not be found." />
</if>
</target>
Примечание, мне нравится позволять членам команды определять свои собственные файлы local.config.xml, которые не становятся преданными управление исходным кодом. Это обеспечивает хорошее место для хранения строк локального соединения или других настроек окружения.
Шаг 4 : Установите свойство среды при вызове NAnt, например:
Можно использовать include
задача включать другой файл типа "build" (содержащий свойства) в основном файле типа "build". if
атрибут include
задача может протестировать против переменной, чтобы определить, должен ли файл типа "build" быть включен:
<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/>
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/>
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/>
У меня была подобная проблема, как которая ответ от scott.caligan, частично решенного, однако, я хотел, чтобы люди смогли установить среду и загрузить соответствующий файл свойств только путем определения цели так:
можно сделать это путем добавления цели, которая устанавливает переменную среды. Например:
<target name="dev">
<property name="environment" value="dev"/>
<call target="importProperties" cascade="false"/>
</target>
<target name="test">
<property name="environment" value="test"/>
<call target="importProperties" cascade="false"/>
</target>
<target name="stage">
<property name="environment" value="stage"/>
<call target="importProperties" cascade="false"/>
</target>
<target name="importProperties">
<property name="propertiesFile" value="properties.${environment}.build"/>
<if test="${file::exists(propertiesFile)}">
<include buildfile="${propertiesFile}"/>
</if>
<if test="${not file::exists(propertiesFile)}">
<fail message="Properties file ${propertiesFile} could not be found."/>
</if>
</target>
Путем я сделал такого рода вещь, должен включать отдельные файлы типа "build" в зависимости от типа сборки с помощью nant задача . Возможная альтернатива могла бы быть должна использовать iniread задача в nantcontrib.