/ 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
Problem med regulære udtryk (ereg_replace(~
Fra : Jonas Delfs


Dato : 27-07-01 19:33

Hej -

Jeg har en streng som befinder sig i $str. Denne streng indeholder en masse
tekst og ind i mellem blokke som disse:
[kunde_navn]
[udbyder_email]

Det skal så rettes til henholdsvis værdien af
$row[kunde_navn]
$row[udbyder_navn]

Til dette formål har jeg prøvet mange kompinationer af nedenstående, og
endeligt virker den.
$str = ereg_replace("\[([a-z0-9_]+)\]", "{$row[\\1]}", $str);

Mit problem er bare at den giver en warning (som jeg i øvrigt ikke kan
skjule med @):
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in
/net/users/a25/671/crazynightdk/www/booksys/main.functions.inc.php on line
40

Hvordan retter jeg denne fejl?

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk

"Developers are being asked to do more with less, do it faster, and make it
fit with the existing systems and databases." - IDC



 
 
Jonas Delfs (27-07-2001)
Kommentar
Fra : Jonas Delfs


Dato : 27-07-01 20:13

"Jonas Delfs" <jonas@nospam.delfs.dk> skrev i en meddelelse
news:9jsc0s$mbg$1@sunsite.dk...

> Jeg har en streng som befinder sig i $str. Denne streng indeholder en
masse
> tekst og ind i mellem blokke som disse:
> [kunde_navn]
> [udbyder_email]
>
> Det skal så rettes til henholdsvis værdien af
> $row[kunde_navn]
> $row[udbyder_navn]
>
> Til dette formål har jeg prøvet mange kompinationer af nedenstående, og
> endeligt virker den.
> $str = ereg_replace("\[([a-z0-9_]+)\]", "{$row[\\1]}", $str);
>
> Mit problem er bare at den giver en warning (som jeg i øvrigt ikke kan
> skjule med @):
> Warning: Unexpected character in input: '\' (ASCII=92) state=1 in
> /net/users/a25/671/crazynightdk/www/booksys/main.functions.inc.php on line
> 40
>
> Hvordan retter jeg denne fejl?

Hvis jeg ændrer anden parameter til "{$row[1]}" - altså fjerner de 2 \ så
får jeg ingen fejl.
Det mærkelige er så bare at alle blokke der matcher første argument bliver
erstattet med værdien af $row[kunde_navn].
Blokken [kunde_navn] er den første i strengen så det er nok derfor det er
den de alle bliver rettet efter netop den - men hvorfor bliver de rettet
efter den første, og ikke efter hvad de burde?

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk

"Developers are being asked to do more with less, do it faster, and make it
fit with the existing systems and databases." - IDC



Thomas L. Kjeldsen (28-07-2001)
Kommentar
Fra : Thomas L. Kjeldsen


Dato : 28-07-01 01:45

In article <9jsebj$rs6$1@sunsite.dk>, Jonas Delfs wrote:
>
> Hvis jeg ændrer anden parameter til "{$row[1]}" - altså fjerner de 2 \ så
> får jeg ingen fejl.
> Det mærkelige er så bare at alle blokke der matcher første argument bliver
> erstattet med værdien af $row[kunde_navn].
> Blokken [kunde_navn] er den første i strengen så det er nok derfor det er
> den de alle bliver rettet efter netop den - men hvorfor bliver de rettet
> efter den første, og ikke efter hvad de burde?

Intet er mærkeligt, vel d.e.i.w.s.php-verdensmand?


SELECT
   dims0, dims1, dims2
FROM
   tabel
WHERE
   ID = 117


(query-lir)


så er
$row[0] == $row['dims0']
og
$row[1] == $row['dims1']
osv svjv...


/tlk

Jonas Delfs (28-07-2001)
Kommentar
Fra : Jonas Delfs


Dato : 28-07-01 11:02

"Thomas L. Kjeldsen" <tlk@tigerdyr.wheel.dk> skrev i en meddelelse
news:slrn9m42om.2aa8.tlk@tigerdyr.wheel.dk...

> > Hvis jeg ændrer anden parameter til "{$row[1]}" - altså fjerner de 2 \

> > får jeg ingen fejl.
> > Det mærkelige er så bare at alle blokke der matcher første argument
bliver
> > erstattet med værdien af $row[kunde_navn].
> > Blokken [kunde_navn] er den første i strengen så det er nok derfor det
er
> > den de alle bliver rettet efter netop den - men hvorfor bliver de rettet
> > efter den første, og ikke efter hvad de burde?
>
> Intet er mærkeligt, vel d.e.i.w.s.php-verdensmand?

verdensmand?-fornemmer jeg et-eller-andet negativt ved det (som jeg ikke er
klar over hvad du mener med)?

> SELECT
> dims0, dims1, dims2
> FROM
> tabel
> WHERE
> ID = 117
>
> (query-lir)
>
> så er
> $row[0] == $row['dims0']
> og
> $row[1] == $row['dims1']
> osv svjv...

Hvis jeg fetcher med eksempelvis mysql_fetch_rows(), ja?

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk

"Developers are being asked to do more with less, do it faster, and make it
fit with the existing systems and databases." - IDC



Thomas L. Kjeldsen (29-07-2001)
Kommentar
Fra : Thomas L. Kjeldsen


Dato : 29-07-01 12:31

In article <9ju2dt$882$1@sunsite.dk>, Jonas Delfs wrote:
>>
>> Intet er mærkeligt, vel d.e.i.w.s.php-verdensmand?
>
> verdensmand?-fornemmer jeg et-eller-andet negativt ved det (som jeg ikke er
> klar over hvad du mener med)?

Sorry, jeg vil i fremtiden søge at minimere antal postings i påvirket tilstand.


>> så er
>> $row[0] == $row['dims0']
>> og
>> $row[1] == $row['dims1']
>> osv svjv...
>
> Hvis jeg fetcher med eksempelvis mysql_fetch_rows(), ja?

Prøv det[tm].


mvh Thomas

Jonas Delfs (29-07-2001)
Kommentar
Fra : Jonas Delfs


Dato : 29-07-01 12:47

"Thomas L. Kjeldsen" <tlk@tigerdyr.wheel.dk> skrev i en meddelelse
news:slrn9m7t02.ic.tlk@tigerdyr.wheel.dk...

> >> Intet er mærkeligt, vel d.e.i.w.s.php-verdensmand?
> >
> > verdensmand?-fornemmer jeg et-eller-andet negativt ved det (som jeg ikke
er
> > klar over hvad du mener med)?
>
> Sorry, jeg vil i fremtiden søge at minimere antal postings i påvirket
tilstand.

.... men påvirket siger man jo hvad man mener, så noget har du da tydeligvis
på hjerte.
Jeg tolkede det lidt som om du mente at min opførsel havde været på
en-eller-anden vis fremfusende, højrøvet eller lign., hvilket jeg ikke helt
kan forstå. ?
Hvis der var noget som helst i det, så ser jeg virkeligt gerne at du
forklarer. (her, eller via den mail-adresse der står her -nospam)

> >> så er
> >> $row[0] == $row['dims0']
> >> og
> >> $row[1] == $row['dims1']
> >> osv svjv...
> >
> > Hvis jeg fetcher med eksempelvis mysql_fetch_rows(), ja?
>
> Prøv det[tm].

Jeg kan ikke se hvad jeg skulle bruge det til. Meningen er jo netop at $row
er et associativt array som har de samme nøgler som de blokke i teksten.
Kan du uddybe?

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk

"Developers are being asked to do more with less, do it faster, and make it
fit with the existing systems and databases." - IDC



Thomas L. Kjeldsen (30-07-2001)
Kommentar
Fra : Thomas L. Kjeldsen


Dato : 30-07-01 18:42

Yikes.... trods det at jeg selv har medvirket til denne tråd kan jeg nu
hverken finde hoved eller hale i den. Sorry folks, beklager miseren. Jeg
skal nok begynde at tage de der aflange piller igen.

Delfs: keep up the good work


mvh Thomas

Morten Blinksbjerg N~ (27-07-2001)
Kommentar
Fra : Morten Blinksbjerg N~


Dato : 27-07-01 20:50

> Jeg har en streng som befinder sig i $str. Denne streng indeholder en masse
> tekst og ind i mellem blokke som disse:
> [kunde_navn]
> [udbyder_email]
>
> Det skal så rettes til henholdsvis værdien af
> $row[kunde_navn]
> $row[udbyder_navn]

> Til dette formål har jeg prøvet mange kompinationer af nedenstående, og
> endeligt virker den.
> $str = ereg_replace("\[([a-z0-9_]+)\]", "{$row[\\1]}", $str);

Jeg siger i mit eksempel: noget der starter med [ og indeholder noget der ikke
er [ en eller flere gange, samt slutter på ]

"\$row[\\1]" returnerer teksten $row[kundens_navn] køres preg_replace med
en /e bliver det behandlet som php kode...

http://mbn.dk/Eksempler/Regex/27-07-2001/ - jeg tror at det virker...

--
Morten Blinksbjerg Nielsen
http://www.mbn.dk/


Jonas Delfs (27-07-2001)
Kommentar
Fra : Jonas Delfs


Dato : 27-07-01 22:26

"Morten Blinksbjerg Nielsen" <usenet@mbn.dk> skrev i en meddelelse
news:9jsgpp$39q$1@sunsite.dk...

> > Jeg har en streng som befinder sig i $str. Denne streng indeholder en
masse
> > tekst og ind i mellem blokke som disse:
> > [kunde_navn]
> > [udbyder_email]
> >
> > Det skal så rettes til henholdsvis værdien af
> > $row[kunde_navn]
> > $row[udbyder_navn]
>
> > Til dette formål har jeg prøvet mange kompinationer af nedenstående, og
> > endeligt virker den.
> > $str = ereg_replace("\[([a-z0-9_]+)\]", "{$row[\\1]}", $str);
>
> Jeg siger i mit eksempel: noget der starter med [ og indeholder noget der
ikke
> er [ en eller flere gange, samt slutter på ]

Jeg forstår fint din regex - tak. :)

> "\$row[\\1]" returnerer teksten $row[kundens_navn] køres preg_replace med
> en /e bliver det behandlet som php kode...

Se der - /e var tricket.

> http://mbn.dk/Eksempler/Regex/27-07-2001/ - jeg tror at det virker...

Det gør det sikkert, men en løsning blev en blanding da det virker mere
logisk/simpelt i mit hoved - den virker også med ereg_replace() lige bortset
fra at $row[kunde_navn] ikke bliver evalueret pga. den manglende e-modifier.

Resultatet blev dette:
$str = preg_replace("/\[([a-z0-9_]+)\]/e", "\$row[\\1]", $str);

Tak!

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk

"Developers are being asked to do more with less, do it faster, and make it
fit with the existing systems and databases." - IDC



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste