Подтвердить что ты не робот

ВЕРХНИЙ, В нижнем регистре, Использовать свойство Ant

В Ant у меня есть свойство с именем "some_property", и пусть его значение равно "hello".

Я пытаюсь заменить место-держатель внутри текстового файла на это значение свойства ( " hello" ) как верхний регистр strong > .
Итак, у меня есть эта задача:

<replaceregexp match="SOME_PLACE_HOLDER" replace="${some_property}" byline="true">

И я хочу, чтобы он работал так, как если бы у меня была эта задача:

<replaceregexp match="SOME_PLACE_HOLDER" replace="HELLO" byline="true">

Я хочу избежать внешних Ant задач (например, Ant -Contrib), поэтому решение должно быть чистым регулярным выражением - это должно быть возможно!

ВЕРХНИЙ, строчный и заглавный.

Кто-нибудь знает правильные регулярные выражения?

4b9b3361

Ответ 1

Я понимаю, что вы хотите избежать расширений Ant, но ограничение, которое решение будет реализовано с помощью regex, немного затруднительно - извините, если следующие изгибы (перерывы?) слишком сильно управляются.

Ant поставляется с javascript-движком в эти дни, поэтому все, что кажется проблематичным для реализации в Ant xml, обычно можно скрыть в scriptdef. Ниже приведены четыре варианта изменения дела.

В вашем случае вы берете свое свойство some_property и обрабатываете его через upper script, чтобы получить верхнюю версию строки, используемой в задаче replaceregexp.

<scriptdef language="javascript" name="upper">
    <attribute name="string" /> 
    <attribute name="to" />

    project.setProperty( attributes.get( "to" ),
                         attributes.get( "string" ).toUpperCase() );
</scriptdef>

<scriptdef language="javascript" name="lower">
    <attribute name="string" /> 
    <attribute name="to" />

    project.setProperty( attributes.get( "to" ),
                         attributes.get( "string" ).toLowerCase() );
</scriptdef>

<scriptdef language="javascript" name="ucfirst">
    <attribute name="string" /> 
    <attribute name="to" />

    var the_string = attributes.get( "string" );
    project.setProperty( attributes.get( "to" ),
                the_string.substr(0,1).toUpperCase() + the_string.substr(1) );
</scriptdef>

<scriptdef language="javascript" name="capitalize">
    <attribute name="string" />
    <attribute name="to" />

    var s = new String( attributes.get( "string" ) );
    project.setProperty( attributes.get( "to" ),
            s.toLowerCase().replace( /^.|\s\S/g,
            function(a) { return a.toUpperCase(); }) );
</scriptdef>

Пример использования:

<property name="phrase" value="the quick brown FOX jUmped oVer the laZy DOG" />

<upper string="${phrase}" to="upper" />
<lower string="${phrase}" to="lower" />
<ucfirst string="${phrase}" to="ucfirst" />
<capitalize string="${phrase}" to="capitalize" />

<echo message="upper( ${phrase} )${line.separator}= '${upper}'" />
<echo message="lower( ${phrase} )${line.separator}= '${lower}'" />
<echo message="ucfirst( ${phrase} )${line.separator}= '${ucfirst}'" />
<echo message="capitalize( ${phrase} )${line.separator}= '${capitalize}'" />

И вывод:

[echo] upper( the quick brown FOX jUmped oVer the laZy DOG )
[echo] = 'THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG'
[echo] lower( the quick brown FOX jUmped oVer the laZy DOG )
[echo] = 'the quick brown fox jumped over the lazy dog'
[echo] ucfirst( the quick brown FOX jUmped oVer the laZy DOG )
[echo] = 'The quick brown FOX jUmped oVer the laZy DOG'
[echo] capitalize( the quick brown FOX jUmped oVer the laZy DOG )
[echo] = 'The Quick Brown Fox Jumped Over The Lazy Dog'

Благодаря Poni и Marco Demaio для реализации капитализации.

Ответ 2

Вы можете использовать что-то похожее на SCriptdef и любой удобный язык.

<scriptdef language="javascript" name="upper">
<attribute name="string" /> 
<attribute name="to" />

project.setProperty( attributes.get( "to" ),
                     attributes.get( "string" ).toUpperCase() );
</scriptdef>

Здесь приведен пример JavaScript. Вы также можете использовать любой другой.