[vbscript]regex replace met functiecall in replacement

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Beste mensen,

Ik moet uit een stukje tekst een aantal hex tekens omzetten naar ansii.

de tekst ziet er zo uit:
"dit is een caf\XE9 waar ze bier tappen"
waar de "\XE9" dus een é voorsteld (hex dus)

nu kan ik in een regex de E9 er wel uit filteren, maar moet deze nog converteren naar een echte char. (de 'é')

normaal kan dat met de functiecall "output = chr(input)", waar je "&H" als prefix moet gebruiken voor je input.

de code wordt dan zoiets
VBScript:
1
2
3
4
5
6
7
8
9
    Set RegularExpressionObject = New RegExp

    With RegularExpressionObject
        .Pattern = "\\X([A-F0-9]{2})"
        .IgnoreCase = True
        .Global = True
    End With

    sRetval = RegularExpressionObject.Replace(sInput, Chr("&H" + $1))


echter krijg ik het in vbscript niet voor elkaar om een functiecall te doen in de replacement parameter
Ik weet dat het in php kan, maar ik krijg het in vbscript niet voor elkaar.

Iemand tips?

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
ik kwam op deze site de volgende code tegen voor c#
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args) {
    string origText = "{17} and {18} are friends.";
    string regexPattern = "{(.*?)}";
    string result = Regex.Replace(origText, regexPattern, MyReplacement);
    Console.WriteLine(result);

    Console.Write("{0}Press any key to continue...", Environment.NewLine);
    Console.ReadKey();
}

static string MyReplacement(Match match) {
    return "student " + StudentIdToName(match.Captures[0]);
}


echter heb ik dit geprobeerd in VBscript, maar dit werkte niet (foutmelding)
dit waarschijnlijk omdat er een andere regex engine wordt gebruikt of omdat hij niet snapt dat 'match' van het type Match is, en dat daar een .Captures aan zit.

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Kun je wel $1 gebruiken in vbScript + regex :?

Anders zou je het op zo'n manier kunnen oplossen misschien:
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sPattern = "\\X([A-F0-9]{2})"
sInput = "dit is een caf\XE9 waar ze bier tappen"
match = pak(sInput, sPattern)
sInput = replace(sInput, match, char("&H" & match))
function pak(strPhrase, strMatchPattern) 
    Set oRegEx = New RegExp 
    oRegEx.IgnoreCase = True
    oRegEx.Pattern = strMatchPattern 

    Set Matches = oRegEx.Execute(strPhrase) 
    if matches.count>0 then 
        ' out("matches")
        pak = matches(0).submatches(0)    
    end if
End function 

(in dit voorbeeld geeft de functie 1 match terug, maar je moet dan dus ff door de collectie heenlopen)

refje: http://www.devguru.com/technologies/vbscript/14105.asp

kaart != map && bottel != fles
Wacht op antwoord