Espressione reg in C #
-
06-07-2019 - |
Domanda
Ho dato la stringa sopra, voglio ottenere il serveripaddress, DB1, uid e **** questi valori da quella stringa.
Soluzione
Non è necessario analizzare una stringa di connessione quando il BCL può farlo per te:
var builder = new OleDbConnectionStringBuilder(connectionString);
var provider = builder.Provider;
var dataSource = builder.DataSource;
var initialCatalog = builder["Initial Catalog"];
var userID = builder["User ID"];
var password = builder["Password"];
Si noti che per una stringa di connessione OLE DB, solo le proprietà standard tra provider hanno nomi di proprietà fortemente tipizzati, a tutto il resto è possibile accedere tramite l'indicizzatore.
Altri suggerimenti
Non usare una regex.
Analizza la stringa di connessione utilizzando SqlConnectionStringBuilder
e quindi accedi alle chiavi da quello.
var b = new SqlConnectionStringBuilder(myConnectionString);
var dataSource = b["Data Source"];
// etc.
Molto più facile, più gestibile e più affidabile.
data source=([^;]*);Initial Catalog=([^;]*);user id=([^;]*);Password=([^;"]*)
Quindi hai le partite nei gruppi da 1 a 4. Se ti annoi puoi nominare i gruppi; aiuta la leggibilità del codice, anche se raramente aiuta la leggibilità della regex stessa.
Non è più facile dividere il valore usando ';' char e quindi dividere ogni elemento per '=' char?
In questo modo la stringa di connessione potrebbe essere modificata dagli utenti e persino l'ordine degli articoli potrebbe essere modificato.