gaurav.s23 Ответов: 3

Как захватить только значение пароля из конфигурационного файла с помощью выражения?


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

на самом деле я использую стороннее решение (cyberark password management), которое захватывает пароль из конфигурационного файла и меняет пароль.

Чтобы cpm знал, где находится пароль в конфигурационном файле,я делаю некоторые настройки, где мне нужно предоставить регулярное выражение.

Рабочее регулярное выражение:
.*;Password=(.*)

Выше регулярное выражение отлично работает там, где настройка конфигурации похожа на
значение="источник данных=мой сервер;начальный каталог=базы данных mydb;идентификатор пользователя=MeTestUser;пароль=xyz123"

Но это не работает для :
значение="источник данных=MtTest.Мире;сохранять сведения о безопасности=true;в идентификатор пользователя=MeTestApp;пароль=абв123;Юникод=истина"

Для такого случая я предоставляю
.*;Password=(.*;)
и все равно ничего не получается .
Мне нужно убедиться, что он принимает только значение пароля перед точкой с запятой.

Примечание. CPM решение знает, что его конфигурационный файл и поэтому, когда он анализирует, чтобы получить значение и изменить его, он ищет данные между цитатами.

Что я уже пробовал:

Я пытался
<pre>.*;Password=(.*;)
это регулярное выражение, но оно не сработало.

3 Ответов

Рейтинг:
21

Jochen Arndt

Попробуй

.*;Password=([^;"]*)
Но это не позволит паролям содержать точку с запятой или двойную кавычку.

Обратите внимание, что я включил двойную кавычку в качестве исключенного символа, потому что в вашем первом примере это было бы частью совпадения.


gaurav.s23

Это не сработало. Если вы знаете, что система управления паролями Cyberark - это решение для управления паролями. Так что он делает это (в моем контексте), что он идет и ищет файл и ищет ключ (эти пути для файла, ключа, значения) предоставляются в настройках CPM. Если он находит пароль в значении, он пытается изменить пароль на новый пароль.
Как я уже сказал .*; Password= (.*) это работает только в том случае, когда строка подключения БД выглядит следующим образом
&ЛТ;добавить ключ="cnSQL" значение="источник данных=мой сервер;начальный каталог=базы данных mydb;идентификатор пользователя=MeTestUser;пароль=xyz123" /&ГТ;

CPM знает, что двойная кавычка после пароля не является значением пароля. Итак, он идет n искать строку до кавычки и менять пароль.

Но в строке соединения вроде
&ЛТ;добавить ключ="cnORA" значение="источник данных=MtTest.Мире;сохранять сведения о безопасности=true;в идентификатор пользователя=MeTestApp;пароль=абв123;Юникод=истина" /&ГТ;
вышеприведенное регулярное выражение не будет работать, так как оно считает пароль abc123;Unicode=True и пытается изменить их все..
Это моя ситуация. Не знаю, ясно я выразился или нет. Извините за мой английский.

Jochen Arndt

Вы можете удалить двойную кавычку из списка исключений.
Я не знаю, какое регулярное выражение вы используете.
Но он работает с общей реализацией регулярного выражения (соответствует любому символу, кроме точки с запятой).

gaurav.s23

Спасибо, что это сработало.

Jochen Arndt

Спасибо вам за ваши отзывы и принятие моего решения.

gaurav.s23

сэр быстрый вопрос, как мне сделать игнорирование регистра пароля и любого пробела, например password = Mypassword;

Рейтинг:
1

Mehdi Gholam

Попробовать это :

password\s*\=\s*(?<password>.*?)\s*[;\"]

Что даст вам именованное совпадение "пароля" со значением фактической строки пароля.


gaurav.s23

Я проверил это регулярное выражение в http://regexpal.com.s3-website-us-east-1.amazonaws.com/?_ga=2.22655417.325949592.1505249668-1227866900.1505249668 это не сработало. Не могли бы вы проверить.

Mehdi Gholam

С какой строкой вы тестируете?

gaurav.s23

когда я тестировал в https://regexr.com/'? ' перед "паролем" как недопустимая цель для квантификатора.

gaurav.s23

подключение к БД из конфигурационного файла..
"Источник Данных=MtTest.Мире;сохранять сведения о безопасности=true;в идентификатор пользователя=MeTestApp;пароль=абв123;Юникод=истина"

gaurav.s23

Его подключение к базе данных из конфигурационного файла.

Mehdi Gholam

Попробуйте вместо этого -> password\s*=\s*(.*?)\s*[;\"]

gaurav.s23

Я попробовал, но ничего не вышло. я не получил эту часть в регулярном выражении [;\"] могу ли я просто сделать это так, как этот пароль\s*=\s*(.*?)\s*[;] ?

gaurav.s23

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

Рейтинг:
0

Patrice T

Я бы попробовал это сделать:

.*;Password=(.*)(;|")

Всего несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & amp; Test RegEx[^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]