/ 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
str_replace
Fra : Lobais


Dato : 27-09-03 16:01

Hej,
Hvad skal jeg skrive mellem <andet> for at flytte det, der står
mellem <noget> derind?

str_replace ("<noget>(.*?)</noget>", "<andet></andet>", $string);

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Peter Brodersen (27-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 27-09-03 16:09

On Sat, 27 Sep 2003 15:00:58 +0000 (UTC), Lobais <1@3.be> wrote:

>Hvad skal jeg skrive mellem <andet> for at flytte det, der står
>mellem <noget> derind?
>
>str_replace ("<noget>(.*?)</noget>", "<andet></andet>", $string);

For det første skal du ikke bruge str_replace (der bare er en
almindelig søg&erstat), men preg_replace. Alternativt ereg_replace,
men den vil ikke æde (.*?)-konstruktionen.

... og du skal bruge \1 (hvilket skrives \\1 i quotes), fx:

$string=preg_replace('_<noget>(.*?)</noget>_','<andet>\\1</andet>',$string);

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Peter Brodersen (27-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 27-09-03 16:10

On Sat, 27 Sep 2003 17:08:31 +0200, Peter Brodersen <usenet@ter.dk>
wrote:

>.. og du skal bruge \1 (hvilket skrives \\1 i quotes), fx:
>
>$string=preg_replace('_<noget>(.*?)</noget>_','<andet>\\1</andet>',$string);

... alternativt $1, fx:

$string=preg_replace('_<noget>(.*?)</noget>_','<andet>$1</andet>',$string);

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Peter Brodersen (27-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 27-09-03 16:13

On Sat, 27 Sep 2003 17:10:17 +0200, Peter Brodersen <usenet@ter.dk>
wrote:

>>$string=preg_replace('_<noget>(.*?)</noget>_','<andet>\\1</andet>',$string);
>
>.. alternativt $1, fx:
>
>$string=preg_replace('_<noget>(.*?)</noget>_','<andet>$1</andet>',$string);

... og bare for at rydde helt op i mit ævl :) Så vil der heller ikke
være nogen problemer i enkeltquotes ved at bruge \1 (fordi \ ved
enkeltquotes kun har betydning, hvis det står foran \ eller ' ):

$string=preg_replace('_<noget>(.*?)</noget>_','<andet>\1</andet>',$string);

Dog vil det så ikke virke med dobbeltquotes:

// virker ikke
$string=preg_replace('_<noget>(.*?)</noget>_',"<andet>\1</andet>",$string);

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Lobais (27-09-2003)
Kommentar
Fra : Lobais


Dato : 27-09-03 18:55

Peter Brodersen wrote in dk.edb.internet.webdesign.serverside.php:
> On Sat, 27 Sep 2003 15:00:58 +0000 (UTC), Lobais <1@3.be> wrote:
>
> >Hvad skal jeg skrive mellem <andet> for at flytte det, der står
> >mellem <noget> derind?
> >
> >str_replace ("<noget>(.*?)</noget>", "<andet></andet>", $string);
>
> For det første skal du ikke bruge str_replace (der bare er en
> almindelig søg&erstat), men preg_replace. Alternativt ereg_replace,
> men den vil ikke æde (.*?)-konstruktionen.
Men, hvis jeg bruger preg_replace vil den så gøre det for hver gang den møder
<noget> eller kun første gang?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Peter Brodersen (27-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 27-09-03 19:17

On Sat, 27 Sep 2003 17:55:16 +0000 (UTC), Lobais <1@3.be> wrote:

>Men, hvis jeg bruger preg_replace vil den så gøre det for hver gang den møder
><noget> eller kun første gang?

Den vil gøre det for hver gang. g-modifieren er default.

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Christian Joergensen (27-09-2003)
Kommentar
Fra : Christian Joergensen


Dato : 27-09-03 19:22

On Sat, 27 Sep 2003 20:17:11 +0200, Peter Brodersen wrote:

>>Men, hvis jeg bruger preg_replace vil den så gøre det for hver gang den møder
>><noget> eller kun første gang?
>
> Den vil gøre det for hver gang. g-modifieren er default.

Kan evt. inverteres med 'U' modifieren

--
Christian Jørgensen | Never test for a bug you don't know how to fix.
http://www.razor.dk |


Peter Brodersen (27-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 27-09-03 20:01

On Sat, 27 Sep 2003 20:21:59 +0200, Christian Joergensen
<mail@phpguru.dk> wrote:

>> Den vil gøre det for hver gang. g-modifieren er default.
>Kan evt. inverteres med 'U' modifieren

Jeg tror, du blander "greedy" og "global" sammen.

"g" (i perlsprog) betyder, at erstatningen foretages mere end første
gang.

"U" betyder, at en quantifier ikke er greedy. Med andre ord, følgende
er ens:

$string=preg_replace('_<noget>(.*?)</noget>_','<andet>$1</andet>',$string);
$string=preg_replace('_<noget>(.*)</noget>_U','<andet>$1</andet>',$string);

... men begge matcher alle gange.

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

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

Månedens bedste
Årets bedste
Sidste års bedste