Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > ASP.NET 3.x > Språk - Övriga språk

Regex

Kimpo
Kimpo

Gradering

#17913

Tjena medlemmar

Har aldrig varit förtjust i regex men måste nu ta tjuren vid hornen och sätta mig in i det. Sitter med ett problem och skulle uppskatta om någon kan ge några tips. Laddar in userkontroller och måste splitta ner strängen av attributer till en array vid ett tillfälle. Här är ett exempel på en sträng som ska splittas till en array i detta fall 4 delar, 1 för varje attribut i strängen.

 "Path=\"~/controls/scriptloader.ascx\" Title=\"Test title\" CssPath=\"/styles/jquerystyles.css\" JavascriptPath=\"/js/ui-functions.js\""

Regexet jag knåpat ihop hittills :  (\s?[a-zA-Z0-9]{2,}\s?[=]\s?""\s?[a-zA-Z0-9]{2,}"")

problemet just nu är att jag får endast ner den till 3 st items i arrayen, de 2 sista attributen vägrar splitta och jag kan inte hitta mönstret som skulle skilja den från de övriga raderna.

[0] Path=\"~/controls/scriptloader.ascx\"

[1] Title=\"Test title\"

[2] CssPath=\"/styles/jquerystyles.css\" JavascriptPath=\"/js/ui-functions.js\"

 

mvh

 

Kimpo

www.restaurangbloggen.se , www.kihi.se
ID: #17913 | Skapades: 2009-09-14 08:57:43 | Tråden har 5 svar och har lästs 613 gånger.

voigtan
voigtan

Gradering

#17916

Det känns som ett rätt enkelt problem och jag tror du har gjort det krångligare än vad det behöver vara, då kommer mot frågor:

1. Attribut (Path, Title, CssPath och JavascriptPath) kommer detta alltid endast vara bokstäver eller kan det innehållar nummer, mellanslag osv?

2. Skall det vara OK att köra " och ' ?

3. Samma fråga med Attribut med värdet, där gissar jag att det skall kunna vara vilken tecken som hellst?

4. Skulle det vara så att du skall kunna hitta specifika attribut?

 

Om vi skall bara köra det du vill utan de svar jag kan behöva för att ge ett mer korrekt svar så är RegEx uttrycket:

(\w+="[\W\w]*?")



Redigerad av voigtan
Anledning:

Tänkte att det kanske kan vara bra med en förklaring med med koden ovan:

(            # Match the regular expression below and capture its match into backreference number 1
   \w           # Match a single character that is a “word character” (letters, digits, etc.)
      +            # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
   =\"           # Match the characters “=\"” literally
   [\W\w]       # Match a single character present in the list below
                   # Any character that is NOT a word character
                   # A word character (letters, digits, etc.)
      *?           # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
   \"            # Match the character “\"” literally
)

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #17916 | Skapades: 2009-09-14 16:28:10

Kimpo
Kimpo

Gradering

#17931

Tack för att du tog dig tid att svara Voigtan :)

1. Yes, jag försöker hålla attributnamnet simpelt enbart bokstäver stora och små.

2. Menar du med 'och' att man ska kunna tilldela ett attribut flera värden? ex ladda in flera css filer? isåfall nej. 

3. Stämmer, Attributvärdet kan komma att innehålla alla möjliga tecken

4.  Inte som det ser ut nu, men kanske något jag bör tänka på? 

regexet du skrev verkar fungera bra , tack så mycket, ska testa imorgon på några andra kontroller men mönstret ska vara detsamma. De två tecken jag har lite svårt att förstå när det kommer till regex är  ^  och $  Om du har något exempel med förklaring så får du väldigt gärna posta det.

mvh

Kimpo

 

www.restaurangbloggen.se , www.kihi.se
ID: #17931 | Skapades: 2009-09-14 19:23:00

voigtan
voigtan

Gradering

#17932

Jag gissar på att du menar:

^hej$
Så är ^ => Start of the string och $ => End Of the string. så i exempelt ovan är om det inte endast innehåller hej så kommer den inte matchar.

så:

"hej" => Träff

"hej " => Inte en träff

men ^ används även i [] och då är det matchar INTE det som är i listan

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #17932 | Skapades: 2009-09-14 19:25:37

Kimpo
Kimpo

Gradering

#17937

ok tackar =)

www.restaurangbloggen.se , www.kihi.se
ID: #17937 | Skapades: 2009-09-14 19:50:45

voigtan
voigtan

Gradering

#17939

Om du inte skall tillåta med " i exemplevis title. så kan vi ju faktist använda en enklare regEx:

(\w+="[^"]+")

(          # Match the regular expression below and capture its match into backreference number 1
   \w         # Match a single character that is a “word character” (letters, digits, etc.)
      +          # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
   =\"         # Match the characters “=\"” literally
   [^\"]       # Match any character that is NOT a “\"”
      +          # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
   \"          # Match the character “\"” literally
)

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #17939 | Skapades: 2009-09-14 20:08:37
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy