webForumDet fria alternativet

preg_replace

10 svar · 334 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200013 890 inlägg
#1

I en fil så har jag texten <rad1>En liten text</rad1>.
Nu vill jag söka igenom filen och byta ut det som står mellan <rad1>-taggarna till något annat.

Jag har kämpat med preg_replace i en evighet nu. Hjälp!

$innehåll = preg_replace ("???", "???", $innehåll);
spangoMedlem sedan juni 20008 205 inlägg
#2
$pattern = '|<rad1>(.*?)</rad1>|';
$replacement = 'Texten mellan taggarna var: $1';
$gonk = preg_replace($pattern, $replacement, $innehåll)
SPiNMedlem sedan mars 20007 896 inlägg
#3

För att fingra på spango's mönster lite:

$pattern = "/<rad1>(.*?)<\/rad1>/i";

Det jag saknade var endast escapern framför / i sluttaggen, egentligen. :)
Lade till i som modifierar för att mönstret ska bli case insensitive, vilket inte är nödvändigt, men kan vara bra. Om du vet att din text kan finns på flera rader, borde du lägga till s som modifierare också - så att punkten i mönstret matchar även radbrytningar.

Varför har du med | i början och slutet av mönstret, spango? Vad gör dom? Vad jag har förstått med preg-regexps är att man måste ha med / i slutet och början? :q

spangoMedlem sedan juni 20008 205 inlägg
#4

Ursprungligen av SPiN

Varför har du med | i början och slutet av mönstret, spango? Vad gör dom? Vad jag har förstått med preg-regexps är att man måste ha med / i slutet och början? :q

Det är antingen pipar eller slashar (alltså "|" eller "/") som sak avgränsa mönstret. Gör man som jag gjorde slipper man quota slashen i </rad1>.

SPiNMedlem sedan mars 20007 896 inlägg
#5

Ah, smart! Hade jag inte en aning om. :)

Web-TorMedlem sedan nov. 200013 890 inlägg
#6

Tack grabbar, det funkar. Det här med reguljära uttryck (?) är verkligen en djungel. :OO

MarcusMedlem sedan juli 2000449 inlägg
#7

Web-Tor: Gör som jag gjort. Jag har byggt ett ganska stort klassbibliotek med regexpar som formaterar, kontrollerar odyl.

Det är alltså praktiska övningar som gäller. När du gjort ett tiotal exempel så bör du nog BÖRJAT få kläm på det. Tips! Skaffa en lathund till vad alla tecken innebär så slipper du kolla upp det varje gång.

När du blivit duktig på regexpar så kommer du kunna göra så mycket häftiga grejjer :-D

RödalacketMedlem sedan feb. 20002 612 inlägg
#8

Skaffa en lathund till vad alla tecken innebär så slipper du kolla upp det varje gång.

Någon som har en på lager... :)

MarcusMedlem sedan juli 2000449 inlägg
#9

Inte direkt, men du kan alltid kolla in
http://www.perldoc.com/perl5.6.1/pod/perlre.html

Där hittar du en del om regexpar. Användes med preg_-funktioner främst.

Jörgen HPMedlem sedan feb. 20012 412 inlägg
#10

De grundläggande är ju inte så många och man klarar sig i de flesta fall med dessa:

^ $ pre och postmatchande operatorer
. operator för godtycklig matchning
* + ? {} repetitionsoperatorer
| alterneringssymbol
[...] [^...] listoperatorer
(...) grupperingsoperatorer

och vanliga tecken blir således själmatchande och tecken intill varandra blir konkateneringsoperator.

Jörgen HPMedlem sedan feb. 20012 412 inlägg
#11

Hittade faktiskt en mer komplett liten lathund nu efter jag skrev ovanstående:

Under rubriken: "Avancerade mönster" har vide listat en hel del:

http://webeye.nu/default2.asp?que=asp/default.asp&exec=asp/artiklar/asp_11.asp

130 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)