13. november 2004 - 15:28Der 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>.
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
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.
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"
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
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
Synes godt om
Ny brugerNybegynder
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.