Avatar billede street-magic Nybegynder
03. september 2008 - 16:10 Der er 11 kommentarer og
1 løsning

RegExp: Find alt i en streng mellem X og Y

Hej

Jeg har en streng der bl.a. består af:
*** FLOP *** [7s 5h 6s]

Hvordan finder jeg alt mellem "*** FLOP *** [" og "]"

På forhånd tak
Avatar billede fennec Nybegynder
03. september 2008 - 16:22 #1
Har du flere forkomster af det pattern i en linje??
Avatar billede fennec Nybegynder
03. september 2008 - 16:23 #2
f.eks:

linje = "hej *** FLOP *** [7s 5h 6s]. med *** FLOP *** [7s 5h 7s]. dig *** FLOP *** [7s 5h 8s]"
Avatar billede street-magic Nybegynder
03. september 2008 - 16:23 #3
Nej
Avatar billede softspot Forsker
03. september 2008 - 16:30 #4
Et skud fra hoften:

dim rx, m
set rx = new RegExp
rx.global = true
rx.ignorecase = true
rx.pattern = "\[[^\[]*\]"
set m = rx.Execute(linje)
if m.count > 0 then
  response.write m(0)
else
  response.write "ingen match."
end if
Avatar billede softspot Forsker
03. september 2008 - 16:36 #5
Hvis du vil have alle forkomster (uden [] omkring) kan du gøre sådan:

dim rx, m, linje
linje = "*** FLOP *** [7s 5h 6s] *** FLOP *** [6s 4h 5s]"
set rx = new RegExp
rx.global = true
rx.ignorecase = true
rx.pattern = "(?!\[)[^\[]*(?=\])"
set m = rx.Execute(linje)
if m.count > 0 then
  for each i in m
    response.write i & "<br>"
  next
else
  response.write "ingen match."
end if
Avatar billede street-magic Nybegynder
03. september 2008 - 16:37 #6
softspot - det ser desværre ikke ud til at virke. Det er i øvrigt vigtigt, at der bliver søgt på "*** FLOP *** [" og ikke kun "["
Avatar billede softspot Forsker
03. september 2008 - 16:37 #7
...og hvis så *** FLOP *** også skal med i mønsteret:

rx.pattern = "(?!\*\*\* FLOP \*\*\* \[)[^\[]*(?=\])"
Avatar billede street-magic Nybegynder
03. september 2008 - 16:43 #8
hmm - virker stadig ikke. Hvis jeg sætter linje til "linje = "*** FLOP *** [7s 5h 6s] *** TURN *** [5c]""

så finder den både "7s 5h 6s" og "5c"

Min pattern er: "(?!\*\*\* FLOP \*\*\* \[)[^\[]*(?=\])"
Avatar billede softspot Forsker
03. september 2008 - 17:22 #9
dim rx, m, linje
linje = "*** FLOP *** [7s 5h 6s] *** TURN *** [5c]"
set rx = new RegExp
rx.global = true
rx.ignorecase = true
rx.pattern = "\*\*\*\sFLOP\s\*\*\*\s\[([^\[]*)\]"
set m = rx.Execute(linje)
if m.count > 0 then
  for each i in m
    response.write i & "<br>"
    for each sm in i.submatches
      response.write sm & "<br>"
    next
  next
else
  response.write "ingen match."
end if
Avatar billede street-magic Nybegynder
03. september 2008 - 17:45 #10
Det ser ud til at virke! Mange tak. Hvis du opretter et svar, så får du lige point :)
Avatar billede softspot Forsker
03. september 2008 - 18:25 #11
Velbekomme :)
Avatar billede softspot Forsker
03. september 2008 - 22:41 #12
Tak for point :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester