webForumDet fria alternativet

Regexp: hitta querystring?

ASPur ASP

11 svar · 771 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#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ö

Medlem sedan juni 20019 519 inlägg
#2

dvs du vill träffar Id ?

id=([\d]+)
Medlem sedan juni 200032 967 inlägg
#3

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

foo = request.querystring("id")
Medlem 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 ;)

Medlem 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. ;)

Medlem sedan aug. 20039 340 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

Medlem 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'
Medlem 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... :))

Medlem 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 ;)

Medlem sedan okt. 20041 556 inlägg
#10

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

Medlem 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 “ ” « »
Medlem sedan okt. 20041 556 inlägg
#12

aha! :)

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