webForumDet fria alternativet

Regex, hitta css-klasser

.NETur .NET

3 svar · 286 visningar · startad av Lovlka

LovlkaMedlem sedan aug. 200416 inlägg
#1

Hoj

Jag ska gå igenom en cssfil och skriva ut lite css-klasser tänkte jag... lättare sagt än gjort verkar det som. ASP.NET verkar vara lite tjurig med mina regexar, som funkar finfint i regulator.

Cssen kan se ut på ganska många olika sätt, men jag vill ändå kunna söka efter ett klassnamn, så ska den matcha alla förekomster...

Så här ser min regex ut nu (.GridFooter är input, ska matcha fetstilade texten nedan. Den gör det i regulator.):

^[\w]*.GridFooter[ ,\t\n]*[^{]*[^}]*}

Här är en del av den data den ska ta ifrån:

/*
 * Data grid styles
 */

/* Main grid table */
table.Grid {
	width: 100%;
}

/* Each td in the grid table */
table.Grid td {padding: 3px;}

/* Each grid item */
tr.GridItem td {
}

/* Every other grid item */
tr.GridAlternatingItem td {
	background-color: #F5F5F5;
}

/* Selected grid item */
tr.GridSelectedItem td {
	background-color: #E8E7E3;
	font-weight: bold;
}

/* Grid header */
tr.GridHeader td {
	border-bottom: 1px solid #99A197;
	font-weight: bold;
}

/* Grid footer, most often not used */
[B]tr.GridFooter td {
	border-top: 3px double #99A197;
	font-weight: bold;
}[/B]

/* Edit item, most often not used */
tr.GridEditItem td {}

/* Grid paging style */
tr.GridPager td {
	text-align: center;
}

Det verkar som att ASP.NET tolkar mitt första ^ som att det ska vara i början på hela strängen, och inte bara början på raden.
Om nåt är oklart, hojta till...

DinoMedlem sedan sep. 20011 914 inlägg
#2
string css = //css texten;
string reg = @"((\w*\..*?){(.*?)})";
MatchCollection mc = Regex.Matches(css, reg, RegexOptions.Singleline);
foreach(Match m in mc)
{
   Response.Write(m.Groups[2].Value + "<br/>");
   string[] grr = m.Groups[3].Value.Split(';');

   foreach(string s in grr)
      Response.Write("&nbsp;&nbsp;" + s + "<br/>");
}
LovlkaMedlem sedan aug. 200416 inlägg
#3

Nehe, funkade faktiskt inte alls så som jag ville.
Hursomhelst löste jag det själv, iofs på ett inte allt för snyggt sätt som dessutom bara är anpassat för mig, men det funkar...

DinoMedlem sedan sep. 20011 914 inlägg
#4

Om du nu bara vill ha efter ett visst classnamn så är det ju bara att ha enligt nedan. Regexet är ju ganska smidigt då du genom grupperna kan få ut varje del av resultatet. Groups[2] är namnet och Groups[3] alla attribut som splittas för att få fram varje enskilt attribut.

string classname = "GridFooter";
StringBuilder sb = new StringBuilder(@"((\w*\.");
sb.Append(classname).Append(".*?){(.*?)})");
string reg = sb.ToString();
MatchCollection mc = Regex.Matches(css, reg, RegexOptions.Singleline);
foreach(Match m in mc)
{
   Response.Write(m.Groups[2].Value + "<br/>");
   string[] grr = m.Groups[3].Value.Split(';');

   foreach(string s in grr)
      Response.Write("&nbsp;&nbsp;" + s + "<br/>");
}
260 ms totalt · 3 externa anrop · v20260731065814-full.94fcd635
0 ms — hämta forumlista (cache)
126 ms — hämta statistik (db)
132 ms — hämta tråd, inlägg och bilagor (db)