webForumDet fria alternativet

Sök och ersätt/wrappa i MySQL med hjälp av PHP

PHP

10 svar · 477 visningar · startad av frippz

Medlem sedan okt. 200518 inlägg
Frågan#1

Det här var en riktigt krånglig en. Jag har texter i en databas enligt följande:

@ingress:Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum aliquet, tortor vel mattis adipiscing, tortor nulla iaculis enim, vitae placerat risus tellus eget risus. Quisque ante. Phasellus pulvinar. Duis aliquam. Nulla semper. Nam semper mauris fermentum eros.

Vestibulum interdum. Integer pulvinar nisl sed massa. Suspendisse ipsum est, ornare eu, nonummy vitae, blandit quis, diam. Pellentesque posuere neque quis pede. Pellentesque dui. Fusce at justo ut tortor tincidunt pulvinar. Proin vel dolor.

Vad jag vill göra är att söka igenom textens första stycke, ta bort @ingress: och sedan wrappa första stycket med en p-tagg. Eftersom detta ska köras in i MySQL så måste SQL-queries göras (troligen REPLACE(); gissar jag på?). Jag misstänker att man får använda preg_match_all och/eller preg_replace.

Oerhört tacksam för hjälp!

Medlem sedan juni 20001 251 inlägg
#2

Vill du lösa det helt i SQL, bör frågan flyttas till SQL-forumet.

Medlem sedan okt. 200518 inlägg
#3

Det vill jag inte och jag tror inte att det går heller.

Medlem sedan juni 20001 251 inlägg
#4

Vad menar du med wrappa? Kan du inte skriva hur en text ser ut och hur denna text ska se ut efter uppdatering?

Medlem sedan okt. 200518 inlägg
#5

**@ingress:**Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum aliquet, tortor vel mattis adipiscing, tortor nulla iaculis enim, vitae placerat risus tellus eget risus. Quisque ante. Phasellus pulvinar. Duis aliquam. Nulla semper. Nam semper mauris fermentum eros.

Vestibulum interdum. Integer pulvinar nisl sed massa. Suspendisse ipsum est, ornare eu, nonummy vitae, blandit quis, diam. Pellentesque posuere neque quis pede. Pellentesque dui. Fusce at justo ut tortor tincidunt pulvinar. Proin vel dolor.

Ursäkta svengelskan. Jag menar omsluta. Första stycket är en ingress resultatet ska bli:

<p class="ingress">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum aliquet, tortor vel mattis adipiscing, tortor nulla iaculis enim, vitae placerat risus tellus eget risus. Quisque ante. Phasellus pulvinar. Duis aliquam. Nulla semper. Nam semper mauris fermentum eros.</p>

Vestibulum interdum. Integer pulvinar nisl sed massa. Suspendisse ipsum est, ornare eu, nonummy vitae, blandit quis, diam. Pellentesque posuere neque quis pede. Pellentesque dui. Fusce at justo ut tortor tincidunt pulvinar. Proin vel dolor.

Medlem sedan mars 20034 471 inlägg
#6

Pröva:

//Fixar början
$text = str_replace('@ingress:', '<p class="ingress">', $text);
//Vad har du för tecken vid radslut? newline?
$text = preg_replace('\n', '</p>', $text, 1);
//1:an ser till att bara första newline tecknet ersätts
Medlem sedan okt. 200518 inlägg
#7

Tack för svaret aasah! Jag tror inte det finns någon newline utan det är väl en whitespace i MySQL-fältet. Lite osäker på det.

Medlem sedan okt. 200518 inlägg
#8

Nu blev det lite krångligare igen, för jag kom på att jag vill ju även omsluta följande paragrafer med <p></p> (dvs. inte <p class="ingress">).

Medlem sedan aug. 20002 975 inlägg
#9

Är det dubbla radbrytningar som betyder nytt stycke?
Eller vad är det säger att det ska bli ett nytt stycke?

Medlem sedan okt. 200518 inlägg
#10

Ja, om databasen jag jobbar med är konsekvent så ska dubbla \n betyda nytt stycke.

Medlem sedan aug. 20002 975 inlägg
#11

Testa då något i stil med:

$text = "<p>" . preg_replace("/(\r\n|\r|\n){2,}/", "</p>\n<p>", trim($text)) . "</p>";

$text = str_replace('<p>@ingress:', '<p class="ingress">', $text);
246 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)