Portál AbcLinuxu, 7. května 2025 12:10
select a, b, ab, cd, e, fghi, jk, ker_ccc_ep.mfw(0, 'asasa', 8) as QWE,neco,blbalb_bla from tabulka_tb_vw where x=3
Z tohoto selectu si vydoluju retezec mezi "select" a "from" a to se pak pomoci regexpu snazim rozdelit:
string SQL = sql.ToUpper();
int indexOfSelect = SQL.IndexOf("SELECT") + "SELECT".Length;
int indexOfFrom = SQL.IndexOf("FROM");
string regexp = @"[,]*?([a-zA-Z0-9 _().\']+|)(?!,)*([a-zA-Z0-9 \'])";
MatchCollection spaceMatches = Regex.Matches(SQL.Substring(indexOfSelect, indexOfFrom - indexOfSelect), regexp);
if (spaceMatches != null && spaceMatches.Count > 0)
foreach (Match m in spaceMatches)
{
Console.WriteLine(m.Value);
}
Bohuzel se vzdy dostanu na tento vysledek:
A , B , AB , CD , E , FGHI , JK , KER_CCC_EP.MFW(0 , 'ASASA' , 8) AS QWE ,NECO ,BLBALB_BLAa ja potrebuji, abych mel
ker_ccc_ep.mfw(0, 'asasa', 8) as QWE
jako jednu "polozku". mohli byste prosim poradit s tim regexpem? Diky.
Řešení dotazu:
((?:[^(,]|[(][^)]*[)])+)
— zapsáno nepřehledně a nepočítá s možností závorek v závorkách (perl-regex)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.