Internett: www.wis.no E-post: wis@wis.no
Tlf: 7245 0190 Fax: 7245 0191

Startsiden | Produkter | Drift | Markedsføring | Ta kontakt | Gå til
Søk:
Logg innLogg inn 

WIS blogg


Regulære utrykk(RegExp) i Access VBA
Av: Ove Halseth Søndag 27.04.2008 (06:50)

 

Eller: Hvordan konvertere phpBB til ren HTML i Access VBA

 

"Om du er en seriøs programmerer så bør RegExp sitte i fingertuppene"

Hørt noe tilsvarende?

 

Vel, fikk i oppgave her forleden og konvertere ett phpBB-forum til ren HTML, og jeg er ikke en racer på RegExp.

Og en skal ikke ta store dykket i RegExp før en skjønner hvorfor RegExp er TESTEN for en programmerer.

 

Men det skal heller ikke store dykket til for å løse så enkle oppgaver som phpBB2HTML.

Her er det du trenger for å løse enkle oppgaver i RegExp:

1. .* - matcher alle tegn

2. .*? - matcher alle tegn, men er ikke grådig, så den stopper ved første forekomst

3. (.*?) treffer det samme som .*? men forskjellen er at når du plasserer søket i () så kan du bruke treffet i strengen du skal erstatte med. Første forekomst av (.*?) tilsvarer $1 i resultat strengen.

4. \ - lar deg søke etter spesialtegn.

 

Eksempel:

Oppgaven er og konvertere:

[url=http://wikipedia.org]Wikipedia[/url]

til:

<a href="http://wikipedia.org">Wikipedia</a>

 

Løsning:

  Regex.Pattern = "\[url\=(.*?)\](.*?)\[/url.*?\]"
  str = Regex.Replace(str, "<a href=$1>$2</a>")

 

Forklaring:

\[url\=   matcher   [url=

så må vi ta vare på adressen:

(.*?)    matcher   "http://wikipedia.org"   og tar vare på det som matcher i variablen $1

\]   matcher   første ]

(.*?)   matcher   Wikipedia   og tar vare på det som matcher i variablen $2

\[/url.*?\]   matcher   [/url]   .*? er tatt med pga at enkelte tager hadde en id i seg: [/url:9878998]

Hele strengen som matcher blir så erstattet med "<a href=$1>$2</a>  der $1 = "http://wikipedia.org" og $2 = Wikipedia

Så slutt resultatet blir: <a href="http://wikipedia.org">Wikipedia</a>

 

Dette ble en veldig kort og overfladisk innføring i regulære uttrykk, men forhåpentlig nok til å fange interessen og inspirere til dypere dykk.

Snorkling i regexp: Microsofts korte innføring i VBA's RegExp

Dypdykking: regular-expressions.info

For lettere kunne teste ut dine regulære uttrykk så anbefaler jeg RegExTester eller Rubular

 

'VBA funksjonen slik den ble til slutt

Public Function phpBB2HTML(str) As String ' Konverter PHPBB kode til html-kode

  'Sjekk om vi har innparameter
  If IsNull(str) Then
    FBB = ""
    Exit Function
  End If


  Dim oRegExp As Object
  Set Regex = CreateObject("VBScript.RegExp")
  With Regex
    .Global = True
    .IgnoreCase = True
    .MultiLine = True
  End With
  '[url]
  Regex.Pattern = "\[url\](.*?)\[/url.*?\]"
  str = Regex.Replace(str, "<a href=""$1"">$1</a>")
  Regex.Pattern = "\[url\=(.*?)\](.*?)\[/url.*?\]"
  str = Regex.Replace(str, "<a href=""$1"">$2</a>")
  '[img]
  Regex.Pattern = "\[img\](.*?)\[/img.*?\]"
  str = Regex.Replace(str, "<img src=""$1"">")
  '[size=15:987327837]
  Regex.Pattern = "\[size\=(.*?):.*?\]"
  str = Regex.Replace(str, "<span style=""font-size:$1px"">")
  Regex.Pattern = "\[\/size.*?\]"
  str = Regex.Replace(str, "</p></span>")
  '[color=#FF0000]Red Text[/color]
  Regex.Pattern = "\[color\=(.*?)\]"
  str = Regex.Replace(str, "<span style=""color:$1"">")
  Regex.Pattern = "\[\/color.*?\]"
  str = Regex.Replace(str, "</p></span>")
  '[quote]
  Regex.Pattern = "\[quote.*?\]"
  str = Regex.Replace(str, "<blockquote><p>")
  Regex.Pattern = "\[\/quote.*?\]"
  str = Regex.Replace(str, "</p></blockquote>")
  '[code]
  Regex.Pattern = "\[code.*?\]"
  str = Regex.Replace(str, "<pre>")
  Regex.Pattern = "\[\/code.*?\]"
  str = Regex.Replace(str, "</pre>")
  '[b]
  Regex.Pattern = "\[b.*?\]"
  str = Regex.Replace(str, "<b>")
  Regex.Pattern = "\[\/b.*?\]"
  str = Regex.Replace(str, "</b>")
  '[i]
  Regex.Pattern = "\[i.*?\]"
  str = Regex.Replace(str, "<i>")
  Regex.Pattern = "\[\/i.*?\]"
  str = Regex.Replace(str, "</i>")
  '[u]
  Regex.Pattern = "\[u.*?\]"
  str = Regex.Replace(str, "<u>")
  Regex.Pattern = "\[\/u.*?\]"
  str = Regex.Replace(str, "</u>")
  '[list]
  Regex.Pattern = "\[list.*?\]"
  str = Regex.Replace(str, "")
  Regex.Pattern = "\[\/list.*?\]"
  str = Regex.Replace(str, "")
  'linjeskift
  str = Replace(str, vbCrLf, "<br>")
  
  FBB = str
  
  Set Regex = Nothing

End Function

 

 

Ett lite hint til slutt i forbindelse med phpBB konvertering, og det er at datoer blir i MySql lagret som sekunder etter 1970-01-01 00:00:00. Dvs for å få frem korrekt dato så må en bruke funksjonen DateAdd("s", dato, "1970-01-01 00:00:00")

 

Mvh

Ove B-)

--Emner: Access, VBA
Kommentarer: 0


 
 Nye poster
Fixing missing (30.05.2012)
Redirect dll us (30.05.2012)
Laste ned passo (11.05.2012)
Bare si "Nei ti (12.12.2011)
Posten er slett (16.11.2011)
 Søk
 
 Populære emner
Access  Ajax  Ansatte  Brannmur  Database/SQL  Debugging  Delphi  FortiClient  Fortigate  GSI  Hjemmet  Html  Internett  iPhone  iPhone Apps  Java  JavaScript  JVM  Nerdehumor  Nettverk  Operativsystem  Palm  Servere  Skrivere  Sybase  Utvikling  VBA  Vista  VPN  Web 2.0  Windows  WinXP  WIS  Wis Tiltak  WisWeb 1  WisWeb 2  Word  XML
 Vis måned
Mai 2012 (3)
Desember 2011 (1)
November 2011 (1)
September 2011 (2)
August 2011 (1)
 Vis fra forfatter
Ove Halseth (46)
Dag Waade (9)
Stig Runar Vangen (7)
Svein Waade (6)
Inge Valaas (1)
Inger Berg (1)
Kristian Ljøkelsøy Vitsø (1)