Avatar billede martinskou Nybegynder
01. juli 2003 - 16:26 Der er 4 kommentarer og
1 løsning

Regexp til at match funktions prototype

Jeg vil gerne have et regular expression som kan matche funktioner af følgende type (funktionen starter altid med et $):

$example
$example()
$example(a)
$example(a,b)
$example(a,b,c)
(gerne så mange argumenter som man nu vælger at smide med)

Jeg vil gerne have et match for hver funktion og et submatch for hvert argument. Alternativ kunne være at lave et .Split(',') på indholdet i parantesen, altså argumenterne hvis det er simplere.

Mvh. Martin
Avatar billede nielslbeck Nybegynder
04. juli 2003 - 00:14 #1
Er vist lidt for træt til at få det til at virke 100% lige nu, men det er følgende regulære udtryk du skal bruge:

Regex reg = new Regex(@"\$example(\((\w,)*\w\))?");

Hvis parameterne skal kunne være mere end et enkelt tegn, kan du i stedet for bruge:

Regex reg = new Regex(@"\$example(\((\w*,)*\w*\))?");

Så får du et match for hvert funktionskald... Så må du selv finde ud af det med submatches (eller også må jeg, når jeg engang vågner igen)...
Avatar billede martinskou Nybegynder
04. juli 2003 - 08:44 #2
Tak for sit svar.

Jeg får også matchen med det udtryk, men der er et problem med argumenterne. I det sidste udtryk er første sub match (a,b,c) anden er [b,] og submatch til denne er a og b.

Jeg tror nok jeg vælger selv at håndtere argumenterne.

Kan du lave et exp hvor alt som står mellem de eventuelle paranteser returneres i første submatch?
Avatar billede Lasse Novice
01. august 2003 - 17:23 #3
Hvad med denne konstruktion. Jeg ved at det ikke helt er det du er ude efter, men det er en god substitut:

System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"\$example(\((?<Parameters>.*)\))?");
System.Text.RegularExpressions.Match m = r.Match(test);
System.Diagnostics.Debug.WriteLine(m.Groups["Parameters"].Value);
Avatar billede websmith Nybegynder
10. august 2003 - 22:59 #4
Prøv denne.

Jeg har testet den, og hos mig virker den.

\$(?<function>[\w\d]*)\(*(?:(?<params>\w*),*)*\)*
Avatar billede martinskou Nybegynder
11. august 2003 - 11:24 #5
Ja, den virker! Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester