Avatar billede ducks Nybegynder
13. november 2004 - 15:28 Der er 4 kommentarer og
2 løsninger

Regular Expression eksempel

Kan nogen give mig et eksempel på, hvordan man bruger regular expressions i visual basic?

Variablen med input hedder strSource
Den skal finde det der står mellem <starther> og <sluther> og den skal finde det, alle de steder der står det. Fx 2 resultater hvis det står 2 stedr.
Og kan man lave sådan, at den kan læse "over" et stykke?
<start12341her>output<sluther>
Kan man gøre sådan i det eksempel, at den søger efter <start*her>.
Avatar billede ldanielsen Nybegynder
14. november 2004 - 15:22 #1
Der står en del om det her

http://msdn.microsoft.com/library/en-us/script56/html/vsobjRegExp.asp?frame=true

Jeg er ikke skrap nok til lig at lave expression'en som du søger, men her er i hvert fald en vejledning i hvordan man bruger RegExp-objektet i VBScript
Avatar billede bernhof Nybegynder
16. november 2004 - 11:16 #2
Jeg kan sige så meget, at dit regular expression skal se således ud:

<starther>(.*?)<sluther>

Den matcher start- og slut-tag og alt hvad der står imellem. Hvad der står imellem bliver desuden captured (gemt) til videre brug.
Avatar billede ducks Nybegynder
19. november 2004 - 21:16 #3
Har lige kigget på eksemplet

MsgBox (RegExpTest("<title>(.*)</title>", "<title>hej</title>"))

Men så bliver output <title>hej</title>, det skal jo kun være `hej´ :\ i ASP ville man kunne kalde den med $2 men ikke i VB. Nogen forslag?

Eller skal jeg lave funktionen om, så jeg angiver hvor meget den skal slette forfra og bagfra? Fx så den sletter 5 forfra og 6 bagfra, så kun `hej´ er tilbage.
Avatar billede ducks Nybegynder
19. november 2004 - 21:16 #4
7 forfra og 8 bagfra, så passer tallende ;)
Avatar billede bernhof Nybegynder
20. november 2004 - 00:11 #5
Husk, at det skal være (.*?) -- dvs. inkl "?" -- ellers virker den ikke med flere tags af samme slags.

Prøv med følgende kode: (den viser en msgbox med indholdet af <title>-tagget, for hver gang den finder et - i nedenstående tilfælde finder den to stk. <title> tags, derfor vises to stk. msgboxes med indholdet af hvert af disse tags):

Private Sub Command1_Click()
    Dim objRE As New RegExp
    Dim objMatches As MatchCollection
    Dim objMatch As Match
   
    Const strTest As String = "asd<title>hej</title>asd<title>moose</title>asd"
   
    objRE.IgnoreCase = True
    objRE.Global = True
    objRE.Pattern = "<title>(.*?)</title>"
   
    Set objMatches = objRE.Execute(strTest)
    For Each objMatch In objMatches
        For I = 0 To objMatch.SubMatches.Count - 1
            MsgBox objMatch.SubMatches(I)
        Next
    Next
End Sub
Avatar billede ducks Nybegynder
20. november 2004 - 00:51 #6
Takker, ser ud til at det var lige det jeg manglede. Har lavet det om til en funktion, hvis andre er interesseret.
- Tester lige lidt endnu om der skulle være en mangel, jeg har overset.


Function getString(strInput, strFindFirst, strFindLast)
    Dim objRE As New RegExp
    Dim objMatches As MatchCollection
    Dim objMatch As Match
    Dim strOutput As String
    objRE.IgnoreCase = True
    objRE.Global = True
    objRE.Pattern = strFindFirst & "(.*?)" & strFindLast
    Set objMatches = objRE.Execute(strInput)
    For Each objMatch In objMatches
        For I = 0 To objMatch.SubMatches.Count - 1
            strOutput = strOutput & objMatch.SubMatches(I) & "|"
        Next
    Next
    getString = Left(strOutput, Len(strOutput) - 1)
End Function

Private Sub Command1_Click()
    Dim strTmp As String
    arrOut = Split(getString("<title>Hello</title><title>World</title>", "<title>", "</title>"), "|")
    MsgBox arrOut(0) & " " & arrOut(1)
End Sub
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