Regex для извлечения опции из командной строки не работает должным образом - PullRequest
0 голосов
/ 28 января 2020

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

Вот пример командной строки:

myprogram --first-option 10 --update-password mypassword --another-option

Вот регулярное выражение, которое «должно» работать (по крайней мере для меня), но не ...

.*?--update-password\s+(?<pwd>.*?)(\s+--\w+)?.*

Моя проблема в том, что именованная группа "pwd" ничего не соответствует из-за .*?. Но если я попытаюсь удалить ? , то он будет соответствовать всей строке, включая следующую опцию.

Насколько я понимаю, ? должен сообщить движку, что он должен соответствовать, пока не найдет что-то еще после, то есть он должен совпадать, пока не найдет другую опцию (\s+--\w+) или ничего. Но, видимо, так не получается ... Думаю, я делал это много раз в прошлом, и всегда получалось так, как я хотел. Не знаю, что мне здесь не хватает.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 28 января 2020

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

  • найти: (^.*?--update-password\s+)\S+(\s+--.*)
  • Заменить: $1*****$2

Демонстрация и объяснение

Причина, по которой ваше регулярное выражение не работает, заключается в дополнительной группе захвата: (\s+--\w+)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...