webForumDet fria alternativet

Regexp: hitta querystring?

11 svar · 771 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 556 inlägg
#1

Jag vill med regexp hitta det fetmarkerade i texten (med matches)
Hur gör jag ett sådant mönster?
www.mff.se/nyhet.asp?Id=2646&KomFran=FS
www.mff.se/nyhet.asp?Id=2646

...alltså igentligen så skulle det kunna stå vad som helst efter &-tecknet och ändå "ignoreras" så att säga.
ex. www.mff.se/nyhet.asp?Id=2646&vad_äter_bävern=snö

voigtann1Medlem sedan juni 20019 519 inlägg
#2

dvs du vill träffar Id ?

id=([\d]+)
@ndersMedlem sedan juni 200032 969 inlägg
#3

Varför ska du använda regexp till det överhuvudtaget?

foo = request.querystring("id")
voigtann1Medlem sedan juni 20019 519 inlägg
#4

@nders skrev:

Varför ska du använda regexp till det överhuvudtaget?

foo = request.querystring("id")

håller med här ;)

TravoniMedlem sedan okt. 20041 556 inlägg
#5

@nders skrev:

Varför ska du använda regexp till det överhuvudtaget?

foo = request.querystring("id")

Det var ju gulligt tänkt, men jag skall "skrapa" en viss sida som ligger på annans server vettu. ;)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#6

http://www.thescripts.com/forum/thread579264.html
Enligt den sidan finns det en klass som heter HttpValueCollection som kanske kan hjälpa dig. (Vet ej om du kan hämta querystrings från den)

Eller om du vill använda en regexp: http://dotnetslackers.com/Regex/re-7541_Regex_Query_string_parser_matches_and_tokenizes_each_name_value_pair_for_a_valid_query_string.aspx

voigtann1Medlem sedan juni 20019 519 inlägg
#7

gjorde om den lite:

Function myQueryString(LinkName, Target)
	Dim myMatch, Match
	With New RegExp
		.IgnoreCase = True
		.Global = True
		.Pattern = "[\?\&]([\w\d ]*)\=([\w\d ]*)"
		Set myMatch = .Execute(LinkName)
	End With

	if myMatch.Count > 0 Then
   		For Each Match In myMatch
   			If LCase(Match.SubMatches(0)) = LCase(Target) Then
				myQueryString = Match.SubMatches(1)
				Exit For
			End If
		Next
	End If
End Function

Response.write myQueryString("hej.asp?he=asd&bob=hej","he") ' Kommer att skriva ut 'asd'
TravoniMedlem sedan okt. 20041 556 inlägg
#8

Tack voigtann1...och ni andra!
Det var just en sådan qs-parser jag behövde.

En liten notis bara:
[\w\d ] är väl ekvivalent med [\w ] eftersom att \w innefattar även 0-9?! eller har jag fel?
(Mina tester talar för min simplifiering... :))

voigtann1Medlem sedan juni 20019 519 inlägg
#9

Match a single character that is a "word character" (letters, digits, etc.)
Så du har rätt där ;)

TravoniMedlem sedan okt. 20041 556 inlägg
#10

En annan fråga, varför hakparenterser?
Skulle det inte funka med: \?\&(\w *)\=(\w *)

voigtann1Medlem sedan juni 20019 519 inlägg
#11

Nej... då du kommer då söka på:

Ett "vilket tecken som helst" + sen " " 0 to Unlimited. Men om vi kapslar in det []
så är det något av de som är inne i [].

Exempel:

"a                "

skulle den träffar hela meningen
medas:

"aa         "

skulle den bara träffar

"a "

Citat från RegExBuddy:

 Match the regular expression below and capture its match into backreference number 1 «([\w ]*)»
    Match a single character present in the list below «[\w ]*»
       Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
       A word character (letters, digits, etc.) «\w»
       The character “ ” « »
TravoniMedlem sedan okt. 20041 556 inlägg
#12

aha! :)

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)