24. marts 2003 - 10:13Der er
7 kommentarer og 1 løsning
Erstatte "AND"/"OR" i streng
Jeg har følgende streng:
"Søren AND Peter" AND "Ole OR Niels"
Jeg skal bruges en regexp der kan erstatte "AND" i sætningen "Søren AND Peter", men ikke det "AND", som står mellem "Søren AND Peter" og "Ole OR Niels"
dvs. den skal kun slette "AND" i de dele af strengen, som omgrænset af (").
Ved lidt ændring skulle den også gerne kunne virke, så den kan erstatte "OR" i "Ole OR Niels".
Det skal være muligt at restatte flere forekomster i samme streng.
Det tog lidt længere tid end jeg først havde forventet, desværre nok fordi det er ASP. Funktionerne omkring regulære udtryk i ASP har et antal besværlige begrænsninger hvoraf de vigtigste er: Med Execute kan man ikke bruge paranteser til at opsamle del-strenge fra den matchede streng, dette kan man godt med Replace, men til gengæld gælder Global ikke i Replace. Jeg har valgt en 2-skridt løsning, hvor jeg først finder alle delstrenge omsluttet af ", derefter erstatter jeg AND i hver af disse med hvad der nu måtte ønskes. Det ser således ud:
Function ReplaceWithinQuotes( str, toreplace, replacement ) Dim result Dim regEx ' Create variables. dim Matches dim NextIndex dim quoteStr
Set regEx = New RegExp ' Create regular expression. regEx.Pattern = """[^""]*""" ' Set pattern. regEx.IgnoreCase = True ' Make case insensitive. regEx.Global = True result = "" count = 1 Set Matches = regEx.Execute(str)
if Matches.Count = 0 then result = str else NextIndex = 1 For Each Match in Matches result = result & mid(str, NextIndex, Match.FirstIndex-NextIndex+1) quoteStr = Match.Value
result = result & Replace( quoteStr, toreplace, replacement ) NextIndex = Match.FirstIndex + Len(quoteStr) + 1 Next result = result & mid(str, NextIndex) end if
ReplaceWithinQuotes = result End Function
Den kaldes fx således:
str = "plihi AND plaha""Søren AND Peter"" AND ""Ole OR Niels"" AND ""bla AND BLI""blaha AND blaha" result = ReplaceWithinQuotes( str, "AND", "noget" )
Det betyder: 1 stk gåseøjne efterfulgt af 0 eller flere 'ikke-gåseøjne' efterfulgt af 1 stk gåseøjne.
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.