|
| 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 \
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?
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
| |
|
|