[ASP] RegExp vraagje

Pagina: 1
Acties:

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Ik heb bijvoorbeeld string die dit bevat:
code:
1
{@include("test1.tpl")} main body {@include("test2.tpl")}


nu wil ik in asp het deel wat tussen de "" in het stuk van {@include("")} zit, ik heb het hier mee geprobeert maar dan pakt hij het hele stuk

"{@include\((.*?)\)}" hier krijg ik als match uit {@include("file.tpl")} maar ik wil alleen file.tpl hebben hoe los ik dit op :?

Ik gebruik op dit moment deze code:
code:
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
26
<% 

Dim objRE
Dim objMatches
Dim objMatch
Dim strExample

Set objRE = New RegExp

objRE.Pattern  = "{@include\((.*?)\)}"

objRE.Global = True
strExample = "{@include(test1.tpl)} main body {@include(test2.tpl)}"

Set objMatches = objRE.Execute(strExample)
If objMatches.Count > 0 Then
    For Each objMatch In objMatches
        Response.Write objMatch.Value & " found at position "
        Response.Write objMatch.FirstIndex & "<br>"


    strExample = objRE.Replace(strExample, "vervanging")
    Next
End If

%>

[ Voor 8% gewijzigd door 4Real op 07-09-2004 12:04 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

je moet je submatch hebben; objMatch.Value bevat inderdaad de complete gematchede string, maar als het goed is bevat dat object ook properties voor de submatches; normaliter iets van objMatch[1]...objMatch[n] (ik ken geen ASP)

Intentionally left blank


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
objMatch.Value staat gelijk aan {@include(test1.tpl)}.
Ik kan wel met een soort substr functie de waarde die ik nodig heb er uit halen maar het moet toch ook anders kunnen.

objMatch(1) & [1] geven allebei een error aan.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

Even zoeken op msdn leert me dat er zoiets is als een subMatches collectie :)
In jouw geval zou dit dus je string moeten geven:
code:
1
objMatch.subMatches(0)

Intentionally left blank


  • Rolgordijn
  • Registratie: Januari 2000
  • Laatst online: 30-06-2022
Niet echt van toepassing op je vraag, maar misschien kan je beter de volgende expressie gebruiken voor het vinden van het eerst volgende sluit haakje.

code:
1
{@include\(([^)]*)\)}


Hoewel bijde expressies functioneel identiek zijn, is het gebruik van character classes altijd efficienter dan non-greedy expressies. Dit komt voort uit backtracking en capturing overhead.