Forum > ASP.NET 3.x > Språk - Övriga språk
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
| Skriv utDet 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
)
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
Jag gissar på att du menar:
^hej$
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
ok tackar =)
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
)