WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Regular expressions (https://www.wn.se/forum/showthread.php?t=30233)

Innocast 2008-06-30 16:23

Hej!

Jag är verkligen inte bra på regexp. men jag håller på att lära mig :-)

Någon som har lust att hjälpa mig med följande:

Om någon av nedanstående påståenden stämmer ska ordet sättas inom [i]-taggar:

1. Ordet är mellan <h1> och </h1>
2. Ordet är det SISTA ordet i meningen som står mellan <h1> och </h1>

Exempel:

Jag är <h1>en snäll häst</h1>!

Resultat:

Jag är <h1>en snäll häst</h1>!

Kort och gott, det sista ordet inom <h1> taggar ska sättas till em :-)

martine 2008-06-30 16:52

Typ:

s!<h1>([^<]*)(\p{L}+)</h1>!<h1>\1\2</h1>!g

Innocast 2008-07-01 09:07

Följande kod fungerar inte... Nog att innehållet i $replacement är fel, får även felmeddelandent:

Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in ----- on line 9

Kod:

$pattern = "s!<h1>([^<]*)(\p{L}+)</h1>!<h1>\1<em>\2</em></h1>!g";

$string = '<h1>Hejsan du</h1> hahahahah <h1>wee</h1> gigigigigi <h1>apa hål</h1> dfjjsdfjk <h1>hej apa</h1>';

$replacement = '${1}1,$3';

echo preg_replace($pattern, $replacement, $string);


martine 2008-07-01 12:38

Citat:

Originally posted by Subcura@Jul 1 2008, 09:07
Följande kod fungerar inte... Nog att innehållet i $replacement är fel, får även felmeddelandent
Du avslöjade inte vilket språk du tänkt använda i din fråga så jag gav ett exempel i perl.

Prova med
echo preg_replace('/<h1>([^<]*)(\pL+)<\/h1>/ui', "<h1>$1$2</h1>", $string);

Innocast 2008-07-01 13:27

Ah, självklart... Sorry för den missen. Men som du förstod så var det PHP :-)

Testade med följande, som tyvärr inte ekade ut något :(

Kod:

$string = '<h1>Hejsan du</h1> hahahahah <h1>wee</h1> gigigigigi <h1>apa hål</h1> dfjjsdfjk <h1>hej apa</h1>';
echo preg_replace('/<h1>([^<]*)(\pL+)<\/h1>/ui', "<h1>$1<em>$2</em></h1>", $string);
exit();


martine 2008-07-01 18:25

Citat:

Originally posted by Subcura@Jul 1 2008, 13:27
Testade med följande, som tyvärr inte ekade ut något :(

Kod:

$string = '<h1>Hejsan du</h1> hahahahah <h1>wee</h1> gigigigigi <h1>apa hål</h1> dfjjsdfjk <h1>hej apa</h1>';
echo preg_replace('/<h1>([^<]*)(\pL+)<\/h1>/ui', "<h1>$1<em>$2</em></h1>", $string);
exit();


Provade just med
Kod:

$string = '<h1>Hejsan du</h1> hahahahah <h1>wee</h1> gigigigigi <h1>apa hål</h1> dfjjsdfjk <h1>hej apa</h1>';
echo preg_replace('/<h1>([^<]* )?(\pL+)<\/h1>/ui', "<h1>$1<em>$2</em></h1>", $string);

som fungerade som tänkt. (Obs. regexpet ändrat lite, kan säkert också optimeras.)

Vilken php-version har du? Varför exit på slutet? Vilken teckenkodning använder du?


Alla tider är GMT +2. Klockan är nu 13:10.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson