webForumDet fria alternativet

ta bort tecken mellan vissa tecken..

PHP

4 svar · 332 visningar · startad av peterpops

Medlem sedan aug. 200135 inlägg
Frågan#1

Öhm, väldigt dålig rubrik känner jag, fast kommer inte på något annat.

Jo, jag har en sträng som kan se ut som följande:

[b&nbsp b4af7eb157][color&nbsp blue&nbsp b4af7eb157]Nisses[&nbsp color&nbsp b4af7eb157][&nbsp b&nbsp b4af7eb157] s BMW är finast,[b&nbsp b4af7eb157][color&nbsp blue&nbsp b4af7eb157]Johan[&nbsp color&nbsp b4af7eb157][&nbsp b&nbsp b4af7eb157] s BMW &nbsp  är grå!

Jag vill nu "ta bort" /ersätta alla tecken i denna strängen som finns i emellan tecknen [ och ], så att exemplet ovan ENDAST skriver ut detta istället:
Nisses BMW är finast, Johans BMW är grå!

Har försökt, sök på forumet, php-manualen etc. utan framgång. Jag är inte speciellt haj på det här med regular expressions och allt vad det heter, som jag misstänker kan hjälpa till här.
Ytterst tacksam för svar.

Och tack för ett ovärderligt forum! :birp

Medlem sedan sep. 20021 655 inlägg
#2
$str = preg_replace("/\\[[^\\]]*\\]/", "", $str);

EDIT:
Irriterande att forumet plockar bort de backslashes jag skriver...

Medlem sedan aug. 20002 975 inlägg
#3

Borde också gå bra med:

$str = preg_replace("/\\[.*?]/", "", $str);
Medlem sedan aug. 200135 inlägg
#4

ovanståeende rader fungerade alldelles utmärkt. Tackar så mycket.

Skulle gärna, om någon har lust att ta sig tid, få ovanståeende strängar förklarade, som en liten introduktion till reg. exp.

Gärna lite guider till sidor om reg. exp. också så man slipper ställa sådana här pinsamma frågor i fortsättningen. :r

Medlem sedan aug. 20002 975 inlägg
#5

Först en liten förbättring om du skulle ha radbrytning inom dina hakparenteser:

$str = preg_replace("/\\[.*?]/s", "", $str);

Hakparenteser [ och ] (i kombination med varandra) är normalt Metatecken i det reguljära uttrycket, så därför sätter man ett backslash framför (escape-tecken) för att det verkligen ska betyda bokstavligen tecknet [.

. är nästan vilket tecken som helst.

* betyder 0 (noll) eller flera, i det här fallet av vilket tecken som helst.

? betyder normalt noll eller ett, men i det här fallet så betyder det att uttrycket inte ska vara girigt. Utan frågetecknet så hade allt till sista ] i strängen tagits bort.
Hade man inte använt frågetecknet hade man istället kunnat skriva:

$str = preg_replace("/\\[.*]/sU", "", $str);

Där U-et hade betytt att inte vara girig (ungreedy).

Växeln s betyder att även radbyte ska tas med som vilket tecken som helst.

/ i början och slutet är begränsningstecken för uttrycket.

Du kan läsa mer om det här:
http://se.php.net/manual/en/pcre.pattern.syntax.php
http://se.php.net/manual/en/pcre.pattern.modifiers.php

648 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
511 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
511 ms — ändringar (db)