Avatar billede mini-me Nybegynder
23. november 2007 - 08:52 Der er 10 kommentarer og
1 løsning

Hjælp til RegExp

Hej,

jeg skal have hjælp til regExp, eller en funktion som kan hjælpe med flg.

Jeg har en streng bestående af en MASSE skrammel, i den streng har jeg <!--start--> og <!--stop--> indsat.

Det jeg ønsker er at få uskrevet det tekst der står imellem start og stop.
Avatar billede smitten1 Nybegynder
23. november 2007 - 09:22 #1
Set re = New RegExp
re.Pattern = "<!--start-->([\s\S]*)<!--stop-->"
Set match = re.Execute(str)

If match.Count Then
    str2 = match(0).SubMatches(0)
End If

InStr plejer do at performe bedre end regexp:

startpos = InStr(str, "<!--start-->")
stoppos = InStr(str, "<!--stop-->")

If startpos And stoppos Then
    str2 = Mid(str, startpos+12, stoppos-startpos-12)
End If
Avatar billede mini-me Nybegynder
23. november 2007 - 09:30 #2
det her virker ihvertfald ikke...

str = myBigString

Set re = New RegExp
re.Pattern = "<!--leftclear-->([\s\S]*)<!--rightclear-->"
Set match = re.Execute(str)

If match.Count Then
    str2 = match(0).SubMatches(0)
End If

'InStr plejer do at performe bedre end regexp:

startpos = InStr(str, "<!--leftclear-->")
stoppos = InStr(str, "<!--rightclear-->")

If startpos And stoppos Then
    str2 = Mid(str, startpos+12, stoppos-startpos-12)
End If
Avatar billede mini-me Nybegynder
23. november 2007 - 09:31 #3
den skriver ikke noget ud..nothing at all
Avatar billede nielle Nybegynder
23. november 2007 - 10:06 #4
'[\s\s]' kan simpelthen skrives som '.':

re.Pattern = "<!--leftclear-->(.*)<!--rightclear-->"

Er bedre mønster er dette:

re.Pattern = "<!--leftclear-->(.*?)<!--rightclear-->"

MEN... ellers er jeg i øvrigt enig - brug InStr() og Mid() som vist i anden halvdel af smitten1's kode-eksempel.
Avatar billede smitten1 Nybegynder
23. november 2007 - 10:20 #5
Hvis der er linieskift i den tekst der skal fanges, så duer punktum ikke som wildcard


Hvis du ikke har en Response.Write str2, så udskriver den heller ikke noget
Avatar billede smitten1 Nybegynder
23. november 2007 - 10:33 #6
str2 = Mid(str, startpos+12, stoppos-startpos-12)

+/- 12 er længden på starttagget, så det skal ændres til 16, hvis jeg kan tælle rigtigt
Avatar billede nielle Nybegynder
23. november 2007 - 10:33 #7
Linjeskift bør (IMHO) klares med en ekstra linje kode:

re.Multiline = True
Avatar billede smitten1 Nybegynder
23. november 2007 - 10:37 #8
Multiline ændrer funktionaliten af ^ og $, ikke på punktum
Avatar billede smitten1 Nybegynder
23. november 2007 - 10:44 #9
dokumentationen bruger [\s\S] for at matche alle tegn, da det ikke er muligt med RegExp at ændre på punktummets egenskaber
Avatar billede nielle Nybegynder
25. november 2007 - 12:20 #10
23/11-2007 10:44:22> Det må jeg give dig ret i. Det er en af de mange steder hvor at regex-varianten afhænger at det valgte programmeringssporg.
Avatar billede mini-me Nybegynder
27. februar 2008 - 15:20 #11
Smitten: du skal have dine point ;-) smid et svar så den kan blive lukket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester