/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Finde tal og andet tegn med str_replace
Fra : Ole Gaarde Kristense~


Dato : 08-11-04 14:16

Hej Gruppe,

Jeg sidder og roder med et udtræk fra en MySQL-database.
I databasen optræder der i den tekst der hives ud "1)" samt "2)" o.s.v
(uden ").
Det vil jeg gerne ændre til "<BR><BR>1) "
Jeg matcher det der hives ud med f.eks. "1)"; for at finde 1)
Det virker også fint så længe nummeret foran ) er mindre end 10
Når jeg til nummer 11) bliver resultatet <BR><BR>1) - 12 bliver til
<BR><BR>2) o.s.v.

Har været dokumentationen igennem på www.php.net samt www.regexlib.com og
www.regularexpressions.info men det er ikke lykkedes mig at finde løsningen.
Det skal bemærkes at den streng der skal ledes efter skal være *netop* 11)
ikke "bare" 2 tal efterfulgt af en parantes.

Hvordan fikser man den?
--
Med venlig hilsen
Ole Gaarde Kristensen




 
 
Ole Gaarde Kristense~ (08-11-2004)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 08-11-04 14:31

"Ole Gaarde Kristensen" <netpost98@hotmail.com> skrev i en meddelelse
news:418f719b$0$37052$edfadb0f@dread15.news.tele.dk...
[KLIP]

Blot en lille tilføjelse.
Har gennemskuet at problemet er at 11) først bliver lavet om til 1) fordi 1)
er en del af 11)
Det betyder at når der ledes efter 11) findes det ikke fordi det allerede er
lavet om.
Alt i alt ændrer det dog ikke på spørgsmålet - hvordan fikser man det?

--
Med venlig hilsen
Ole Gaarde Kristensen



Janf (08-11-2004)
Kommentar
Fra : Janf


Dato : 08-11-04 15:16

Ole Gaarde Kristensen wrote:
> "Ole Gaarde Kristensen" <netpost98@hotmail.com> skrev i en meddelelse
> news:418f719b$0$37052$edfadb0f@dread15.news.tele.dk...
> [KLIP]
>
> Blot en lille tilføjelse.
> Har gennemskuet at problemet er at 11) først bliver lavet om til 1) fordi 1)
> er en del af 11)
> Det betyder at når der ledes efter 11) findes det ikke fordi det allerede er
> lavet om.
> Alt i alt ændrer det dog ikke på spørgsmålet - hvordan fikser man det?
>
Du skal sørge for at søge efter de længste strenge først.

Hvis det du søger efter er et array, kan du evt. anbringe de længste
søgestrenge først i array'et. Måske hjælper det. Ellers kan du måske
lave to søgninger, en med 2-cifrede tal og derefter én med 1-cifrede.

--
Jan Fjeldmark mailto:janf@janf.dk http://janf.dk/
Hvad du end tror du er, så er du altid meget mere.

Ole Gaarde Kristense~ (08-11-2004)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 08-11-04 15:28

"Janf" <janf@janf.dk> skrev i en meddelelse
news:418f7f9d$0$168$edfadb0f@dread11.news.tele.dk...
> Du skal sørge for at søge efter de længste strenge først.
>
> Hvis det du søger efter er et array, kan du evt. anbringe de længste
> søgestrenge først i array'et. Måske hjælper det. Ellers kan du måske
> lave to søgninger, en med 2-cifrede tal og derefter én med 1-cifrede.
>
Hej Jan,

Ja som udgangspunkt ser det jo aldeles fornuftigt ud. Problemet er bare at
hvis 11) laves om først vil det blive lavet om igen når der søges efter 1)
og så er jeg desværre lige vidt.
Tror nærmere jeg skal begynde at bruge preg_replace. Det har jeg prøvet, men
kan ikke ramme det pattern der giver præcis 11)

--
Med venlig hilsen
Ole Gaarde Kristensen



Janf (08-11-2004)
Kommentar
Fra : Janf


Dato : 08-11-04 16:05

> Ja som udgangspunkt ser det jo aldeles fornuftigt ud. Problemet er bare at
> hvis 11) laves om først vil det blive lavet om igen når der søges efter 1)
> og så er jeg desværre lige vidt.
> Tror nærmere jeg skal begynde at bruge preg_replace. Det har jeg prøvet, men
> kan ikke ramme det pattern der giver præcis 11)

Ved du hvad der står foran tallet?

Hvis det fx. altid er en blank, kan du søge efter " 11)" og erstatte det
med " <br><br>11)".

Med preg_replace kan du søge efter "[!\>]([0-9][0-9]*\))"

Det betyder, at du søger efter noget, som IKKE starter med ">",
hvorefter der kommer et ciffer efterfulgt af nul eller flere cifre og
til sidst en højreparentes.

Venstreparentesen og den sidste højreparentes indrammer en del af
udtrykket. Du kan referere til dette i replace-udtrykket, men jeg kan
ikke huske hvordan.

Du skal finde en option, som gør, at preg_replace søger efter de længst
mulige matches isf. de kortest mulige. Det hedder måske noget med 'greedy'.

(Vær meget kritisk over for mit forslag. Jeg er ingen haj, og det er ud
fra hukommelsen).

--
Jan Fjeldmark mailto:janf@janf.dk http://janf.dk/
Hvad du end tror du er, så er du altid meget mere.

Ole Gaarde Kristense~ (08-11-2004)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 08-11-04 20:51

"Janf" <janf@janf.dk> skrev i en meddelelse
news:418f8aff$0$153$edfadb0f@dread11.news.tele.dk...
> > Ja som udgangspunkt ser det jo aldeles fornuftigt ud. Problemet er bare
at
> > hvis 11) laves om først vil det blive lavet om igen når der søges efter
1)
> > og så er jeg desværre lige vidt.
> > Tror nærmere jeg skal begynde at bruge preg_replace. Det har jeg prøvet,
men
> > kan ikke ramme det pattern der giver præcis 11)
>
> Ved du hvad der står foran tallet?
>
> Hvis det fx. altid er en blank, kan du søge efter " 11)" og erstatte det
> med " <br><br>11)".
>
> Med preg_replace kan du søge efter "[!\>]([0-9][0-9]*\))"
>
> Det betyder, at du søger efter noget, som IKKE starter med ">",
> hvorefter der kommer et ciffer efterfulgt af nul eller flere cifre og
> til sidst en højreparentes.
>
> Venstreparentesen og den sidste højreparentes indrammer en del af
> udtrykket. Du kan referere til dette i replace-udtrykket, men jeg kan
> ikke huske hvordan.
>
> Du skal finde en option, som gør, at preg_replace søger efter de længst
> mulige matches isf. de kortest mulige. Det hedder måske noget med
'greedy'.
>
> (Vær meget kritisk over for mit forslag. Jeg er ingen haj, og det er ud
> fra hukommelsen).
>
Hej Jan,
Bare i orden. Tak for forslaget. Har kun testet en lille smule, men det ser
ud som om det bliver Peters forslag om strtr der bliver implementeret.
Umiddelbart ser det nemlig ud som om den kan klare det uden videre.
Tak for hjælpen

--
Med venlig hilsen
Ole Gaarde Kristensen



Peter Brodersen (08-11-2004)
Kommentar
Fra : Peter Brodersen


Dato : 08-11-04 16:23

On Mon, 8 Nov 2004 15:28:19 +0100, "Ole Gaarde Kristensen"
<netpost98@hotmail.com> wrote:

>Problemet er bare at
>hvis 11) laves om først vil det blive lavet om igen når der søges efter 1)
>og så er jeg desværre lige vidt.

strtr() kan godt lave erstatninger på forskellinge strenge, uden at
den replace'r "oven i sig selv":
http://dk2.php.net/manual/en/function.strtr.php

Fx:
<?php
print strtr("a og b",array("a"=>"b","b"=>"a"));
?>

--
- Peter Brodersen

Ole Gaarde Kristense~ (08-11-2004)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 08-11-04 20:53

"Peter Brodersen" <usenet@ter.dk> skrev i en meddelelse
news:cmo30s$fft$1@katie.ellegaard.dk...
> On Mon, 8 Nov 2004 15:28:19 +0100, "Ole Gaarde Kristensen"
> <netpost98@hotmail.com> wrote:
>
> >Problemet er bare at
> >hvis 11) laves om først vil det blive lavet om igen når der søges efter
1)
> >og så er jeg desværre lige vidt.
>
> strtr() kan godt lave erstatninger på forskellinge strenge, uden at
> den replace'r "oven i sig selv":
> http://dk2.php.net/manual/en/function.strtr.php
>
> Fx:
> <?php
> print strtr("a og b",array("a"=>"b","b"=>"a"));
> ?>
>
Hej Peter,
Indtil videre ser det ud som om det var lige hvad jeg ledte efter. Og mig
der synes at jeg havde været alle streng-funktionerne igennem!
Tak for hjælpen. Jeg implementerer det for alvor i morgen, og så skal jeg
nok give lyd fra mig hvis det ikke virker.

--
Med venlig hilsen
Ole Gaarde Kristensen



Leonard (08-11-2004)
Kommentar
Fra : Leonard


Dato : 08-11-04 15:32

"Ole Gaarde Kristensen" <netpost98@hotmail.com> wrote:

>Når jeg til nummer 11) bliver resultatet <BR><BR>1) - 12 bliver til
><BR><BR>2) o.s.v.

Det vil nok hjælpe de kloge hoveder gevaldigt hvis de må se det udtryk
du har forsøgt dig med.

--
med venlig hilsen
Leonard - http://leonard.dk/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste