replaceregexp, чтобы обрезать не работает должным образом в Netbeans - PullRequest
0 голосов
/ 07 января 2010

Я пытаюсь обрезать некоторые значения с помощью replaceregexp. Все выглядит великолепно, когда я пробую это в программном обеспечении, таком как EditPad Pro.

Вот пример того, чего я хочу достичь:

mf.version.impl = 2.01.00  
mf.version.spec= 2.01.00  

Обратите внимание на лишние пробелы после последней цифры.

Тогда я использую этот шаблон:

[0-9]+.[0-9]+.[0-9]+[ ]*

Но в Netbeans это не работает.

Вот моя команда муравьев для этого:

<!--If postfix is empty, remove the empty space-->
    <replaceregexp file="../Xinco/nbproject/project.properties"
                   match="mf.version.spec?=?[0-9]+.[0-9]+.[0-9]+[ ]*"
                   replace="mf.version.spec = ${version_high}.${version_mid}.${version_low}"
                   byline="false"/>
    <replaceregexp file="../Xinco/nbproject/project.properties"
                   match="mf.version.impl?=?[0-9]+.[0-9]+.[0-9]+[ ]*"
                   replace="mf.version.impl = ${version_high}.${version_mid}.${version_low}"
                   byline="true"/>

$ {version_high}. $ {Version_mid}. $ {Version_low} - это уже определенные переменные, которые соответствуют 2.01.00 соответственно.

В результате

mf.version.impl = 2.01.00 
mf.version.spec = 2.01.00 

Обратите внимание на один дополнительный пробел после последней цифры.

Я отладил вызовы ant, и похоже, что вышеприведенная команда не выполняется, поскольку совпадение не произошло.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 07 января 2010

Поскольку значение не имеет значения, вам не нужно явно его сопоставлять. Попробуйте:

^mf\.version\.impl\s*=.*$

Значение:

  • ^ - начало строки (в многострочном режиме)
  • mf\.version\.impl - строка "mf.version.impl" буквально, с точками, которые не открываются.
  • \s* - ноль или более пробелов
  • .* - все остальное (мы можем игнорировать версию, поскольку вы изменяете ее с помощью константы), вплоть до ...
  • $ - конец строки

Бонус-трек:

Глядя на спецификации , похоже, что вы можете перехватить обе строки одним регулярным выражением (хотя не уверен, что оно работает):

^(mf\.version\.(impl|spec))\s*=.*$

и правило замены:

replace="\1 = ${version_high}.${version_mid}.${version_low}"

Это заменит \1 на значение, которое он захватил ранее, поэтому, опять же, вам нужно только одно правило. (для пустяков обычно $1 используется в замен, но не здесь)

1 голос
/ 07 января 2010

Вам, вероятно, следует сбежать от своих и использовать группу захвата

например. (Например, Perl regex)

s/([0-9]+\.[0-9]+\.[0-9]+)[ ]*/$1/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...