[VBA/VBscript] RegEx - backreferencing

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 24-06 09:35

CoRrRan

Don't Panic!!!

Topicstarter
Waarom werkt het niet als ik in VBA de "Microsoft VBScript Regular Expressions 5.5"-referentie (Tools >> References in de VBE) aan zet en de volgende code probeer te draaien:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dim FSO As Scripting.FileSystemObject
Dim TS As Scripting.TextStream

Set FSO = New Scripting.FileSystemObject
Set TS = FSO.OpenTextFile(sSource, ForReading, False)

Dim RegEx As VBScript_RegExp_55.RegExp
Set RegEx = New VBScript_RegExp_55.RegExp

RegEx.Global = False
RegEx.MultiLine = True

RegEx.Pattern = "^((TEXT1\s+?TEXT2.+?)TEXT3(.+?))$"

sData = TS.ReadAll   ' TS = source
TS.Close

' TEXT4 = tekst die TEXT3 vervangt
sData = RegEx.Replace(sData, "$$1" & vbCrLf & "$2" & TEXT4 & "$3")
'-----------------------------^^^---------------------------------
' Dit is volgens mij het 'probleem'

Set TS = FSO.CreateTextFile(sFile & ".out", True)  ' TS = output
TS.Write sData
TS.Close
Als ik dit zo draai, verwacht ik een regel met een $-teken voor de gevonden RegEx (dus de complete regel), gevolgd door een CrLF, gevolgd door dezelfde regel als de RegEx, waar TEXT3 vervangen is door TEXT4.

Wat ik echter krijg, is een 'lege' regel, met daarin "$1".

Iemand een idee?

(Ik heb het maar hier geplaatst, aangezien ik het in VBA aan het schrijven ben, maar het zou zomaar ook een "clientside scripting" probleem kunnen zijn...)

Meer informatie: http://www.regular-expressions.info/vbscript.html

P.S. Ik begrijp dat er ook andere manieren zijn om dit op te lossen (andere programma's), maar ik heb Excel hier bij nodig, vandaar deze keuze.

[ Voor 6% gewijzigd door CoRrRan op 03-08-2011 12:31 ]

-- == Alta Alatis Patent == --


Acties:
  • 0 Henk 'm!

  • CoRrRan
  • Registratie: Juli 2000
  • Laatst online: 24-06 09:35

CoRrRan

Don't Panic!!!

Topicstarter
Nou, blijkbaar werkt het als je regel 19 vervangt met:
Visual Basic:
1
2
sData = RegEx.Replace(sData, "$$$1" & vbCrLf & "$2" & TEXT4 & "$3")
'-----------------------------^^^^-------------------------------- 
Blijkbaar is het $-teken een escape-character voor de replacement string.

-- == Alta Alatis Patent == --