Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
30 / 11 / 5
Регистрация: 01.03.2014
Сообщений: 379
1

Регулярное выражение для строки подключения

27.07.2018, 18:03. Показов 1801. Ответов 13

Author24 — интернет-сервис помощи студентам
Добрый день.

Есть строка подключения к БД:
Data Source=xx1;Initial Catalog=XXX2.mdf;User ID=xxx;Password=xxy

Необходимо вытянуть:
xx1
XXX2.mdf
xxx
xxy

Для первого параметра делаю так:
C#
1
2
            Regex _dataSource = new Regex(@"Data Source.*?;");
            Match match = _dataSource.Match(connect);
И получаю:
Data Source=xx1;
,а хотелось бы
xx1
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2018, 18:03
Ответы с готовыми решениями:

Регулярное выражение для проверки строки на номер телефона
Регулярное выражение для проверки строки на номер телефона в формате +37525-xxx-xx-xx Вот...

Не работает регулярное выражение для строки с латинскими буквами
Есть 2 строки: "Дата: 01.03.2012" и "Date:2012-03-01" поочередно для каждой из строк выполняю ...

Регулярное выражение для парсинга строки со множеством переносов
Добрый день. подскажите как написать выражение. <div class="address"> ...

Составить регулярное выражение для разбивки строки по параметрам
Помогите разбить при помощи регулярного выражения следующую строку на параметры: Исходная...

13
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
27.07.2018, 18:57 2
holod2014, например так можно:
C#
1
2
3
4
5
string connectionString = "Data Source=xx1;Initial Catalog=XXX2.mdf;User ID=xxx;Password=xxy";
foreach (Match m in Regex.Matches(connectionString, @"([\w ]+)=([^;]+);?"))
{
    Console.WriteLine(m.Groups[2].Value);
}
Однко раз речь идет о строке подключения, то лучше использовать специализированный класс который знает синтаксис этой строки
C#
1
2
3
4
5
6
7
8
9
using System.Data.Common;
...
var csb = new DbConnectionStringBuilder();
csb.ConnectionString = "Data Source=xx1;Initial Catalog=XXX2.mdf;User ID=xxx;Password=xxy";
foreach (KeyValuePair<string, object> kvp in csb)
{
    string value = kvp.Value.ToString();
    Console.WriteLine(value);
}
0
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
27.07.2018, 19:59 3
holod2014,
еще как вариант разделить по ';' получим набор параметр значение в током виде
Data Source=xx1;
Initial Catalog=XXX2.mdf;
User ID=xxx;
Password=xxy
дальше разделить по знаку '='

но OwenGlendower, прав лучше всего в случае со строкой подключений использовать ConnectionBuilder
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
27.07.2018, 20:04 4
Цитата Сообщение от Wolflind Посмотреть сообщение
еще как вариант разделить по ';'
Есть один тонкий момент. Значение может содержать точку с запятой.
0
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
27.07.2018, 20:19 5
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Есть один тонкий момент. Значение может содержать точку с запятой.
в каких случаях? не встречал таково
вы про Password?

Добавлено через 1 минуту
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Regex.Matches(connectionString, @"([\w ]+)=([^;]+);?")
в током случаи и Regex на него наткнется и '=' может тоже встречаться
какой нибудь пароль типа "123;abc=123"
1
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
27.07.2018, 20:21 6
Wolflind, речь о ситуации в принципе. Синтаксис строки подключения это допускает. И это неплохо бы учитывать. То что регулярное выражение из моего примера это не учитывает я знаю. Именно поэтому я и посоветовал DbConnectionStringBuilder.
0
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
27.07.2018, 20:30 7
в такой ситуации я даже в не поможет DbConnectionStringBuilder он вроде как может левые значение определять втокам случаи он и выделить как отдельное значение

Не по теме:

даже интересно стало нужно будет попробовать

0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
27.07.2018, 20:33 8
Лучший ответ Сообщение было отмечено holod2014 как решение

Решение

Цитата Сообщение от Wolflind Посмотреть сообщение
даже в не поможет DbConnectionStringBuilder
Не знаю почему ты так решил. Он правильно работает в такой ситуации
C#
1
2
3
4
5
6
var csb = new DbConnectionStringBuilder();
csb.ConnectionString = "abc=123; xyz=\"1;2\"";
foreach (KeyValuePair<string, object> kvp in csb)
{
    Console.WriteLine("{0}={1}", kvp.Key, kvp.Value);
}
0
126 / 106 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
27.07.2018, 20:42 9
Цитата Сообщение от Wolflind Посмотреть сообщение
"123;abc=123"
я имею ввиду что эта вся страка пароль
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
27.07.2018, 20:47 10
Wolflind, нет проблем. Без кавычек в пароле
C#
1
csb.ConnectionString = "password=\"123;abc=123\"";
и с кавычками
C#
1
csb.ConnectionString = "password='\"123;abc=123\"'";
0
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45
27.07.2018, 21:48 11
Цитата Сообщение от Wolflind Посмотреть сообщение
в такой ситуации я даже в не поможет DbConnectionStringBuilder он вроде как может левые значение определять втокам случаи он и выделить как отдельное значение
DbConnectionStringBuilder - сам имел дело с этим инструментом, мощная штука. Пасы проглатывает с любыми символами.
0
30 / 11 / 5
Регистрация: 01.03.2014
Сообщений: 379
27.07.2018, 23:03  [ТС] 12
Вообще, когда создавал тему как-то и не задумался, что в пароль можно поместить символ ";".

Есть приложение, которое работает с БД. Но со временем сервера меняются...
Строку подключения храню в app.config. Поэтому я её считываю, потом прогоняю через регулярные выражения (спасибо за помощь) и вывожу в textboxы. Далее, если сервер изменится, меняю значения в textboxсах, удаляю строку подключения из app.config, строю новую с помощью DbConnectionStringBuilder() и записываю строку в app.config. Затем, как я понимаю, надо перезапустить программу.

Наверное, есть способ и полегче, но пока так.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
27.07.2018, 23:08 13
Цитата Сообщение от holod2014 Посмотреть сообщение
Строку подключения храню в app.config. Поэтому я её считываю, потом прогоняю через регулярные выражения (спасибо за помощь) и вывожу в textboxы. Далее, если сервер изменится, меняю значения в textboxсах, удаляю строку подключения из app.config, строю новую с помощью DbConnectionStringBuilder() и записываю строку в app.config.
Шаг прогона через регулярные выражения здесь не нужен. Следует сразу использовать DbConnectionStringBuilder.
1
30 / 11 / 5
Регистрация: 01.03.2014
Сообщений: 379
27.07.2018, 23:16  [ТС] 14
А как тогда выводить значения в textboxы?

Добавлено через 1 минуту
Строку подключения получаю так:
C#
1
2
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var connect = config.ConnectionStrings.ConnectionStrings["DBConnection"].ConnectionString;
Добавлено через 2 минуты
Ступил, можно же так:
C#
1
2
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connect);
            textbox1=builder.DataSource;
Всем спасибо!!!
0
27.07.2018, 23:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2018, 23:16
Помогаю со студенческими работами здесь

Регулярное выражение для получения строки с любыми символами по бокам
Есть выражение выбирающее айди меток: Regex rx = new Regex(@&quot;&lt;label id=&quot;&quot;(.*)&quot;&quot;...

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

Регулярное выражение работает только для строки с дословными литералами
Я очень мало знаком с регулярными выражениями. Подозреваю, что не вижу чего то очевидного. Вот код...

Правильно составить регулярное выражение для строки, содержащей скобки
есть строка пытался сделать так , @&quot;&quot;&quot;\d+&quot;&quot;+&quot; но проблема в том что в &quot;events&quot; есть...

Регулярное выражение не работает для строки, если в ней есть перенос
вот еще подскажите. Нужно вытащить записи из html. для выражения: &lt;td class=&quot;val&quot;...

Регулярное выражение для получения чисел из строки, где эти два числа записаны через слеш
Ввожу строку &quot;1/3&quot;, а оттуда хочу достать только 1 и 3. Помогите составить регулярное выражение


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru