Использование регулярных выражений в findstr - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь реализовать хук-скрипт в Subversion, используя findstr с регулярным выражением.Намерение состоит в том, чтобы обеспечить включение в сообщение журнала записи, которая соответствует формату, используемому нашим инструментом отслеживания проблем (Atlassian JIRA).Каждый из наших выпусков состоит из 4-6 заглавных букв и от 2 до 4 цифр, разделенных дефисом (например, "TEST-554" или CMMGT-392 "). В соответствии с инструкциями в документации Subversion я создал командный файл дляпроверьте сообщение в журнале на наличие правильно отформатированной записи, используя регулярное выражение

findstr ([A-Z]{3,6}\-[0-9]{2,4}) > nul

Я протестировал регулярное выражение в ряде инструментов тестирования, и оно, кажется, работает, но когда язапустить его как часть сценария перехвата, он не может вернуть совпадение. В качестве своего рода «контроля», я попытался использовать регулярное выражение

findstr ...... > nul

и смог найтиКто-нибудь видит, где я иду не так?

1 Ответ

1 голос
/ 01 марта 2012

findstr требует, чтобы опция /R использовала регулярные выражения, но она не поддерживает расширенные регулярные выражения, поэтому такие вещи, как count ({3,6}), не работают.Кроме того, совпадения ноль или один (?) не работают, поэтому выполнение того, что вы хотите, будет довольно многословным.Кроме того, английская сортировка Windows означает, что [A-Z] соответствует 'A', 'b', 'B', 'z' и 'Z', но не 'a'.Вот что может сработать:

findstr /R "[ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9]"

Эта невероятно многословная команда может превышать максимальную длину команды оболочки (еще не проверено), но в основном выполняет то, что вы хотите, содержа отдельное совпадение для каждого изперестановки букв и цифр.Еще одна странная вещь в findstr: если вы не используете опцию /C, пробелы в строке соответствия будут использоваться для разделения ее на отдельные выражения соответствия.

Если у вас есть какая-либо опция, кроме findstr, такаякак PowerShell, Python или даже VBScript, я бы посоветовал вам использовать его.Удачи!

РЕДАКТИРОВАТЬ: Вот однострочный Perl, который я использовал для генерации вышеуказанной команды:

perl -le 'BEGIN{$\=" "}for $x (3..6){for $y (2..4){print join("","[",A..Z,"]") x $x, "-", "[0-9]" x $y}}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...