webForumDet fria alternativet

Infoga i variabler

4 svar · 383 visningar · startad av Qaz

QazMedlem sedan feb. 2000211 inlägg
#1

Hur gör jag för att infoga ett mellanslag efter x antal tecken i en variabel?

Vad jag tänkt att göra är att hämta data från en databas, stoppa in den i en variabel. Om sedan den variabeln innehåller ett ord som är längre än ex. 15 tecken i följd utan mellanslag vill jag stoppa i ett mellanslag.

Hoppas att nån förstod och kan hjälpa mig.....

RobbanMedlem sedan dec. 19992 555 inlägg
#2
<?php
$string = 'Ord1 ord2 ettjättejättejättelångtord3 ord5 ord5';
$string = ereg_replace("([^ \t\n\r\f]{15})([^ \t\n\r\f]*)", "\\1 \\2", $string);
echo $string;
?>

------------------
Robban < robban@lipogram.com >

QazMedlem sedan feb. 2000211 inlägg
#3

Jag ska genast prova. Tack Robban. :)

För att jag ska fatta vad jag gör (jag har det otäcka ovanan att vilja göra det ibland....) så skulle det vara roligt att veta vad de olika momenten gör. En del förstår jag men resten??

vad står \f för??

och vad innebär detta "\\1 \\2" ?

resten vet jag ung. vad det innebär.

nicclasMedlem sedan feb. 20001 050 inlägg
#4

Om du inte vill förstå det reguljära uttrycket kan du använda:

$string=chunk_split($string,15," ");
echo $string;

/nicclas @ http://www.nic-sys.se/

RobbanMedlem sedan dec. 19992 555 inlägg
#5

Där ser man. Funktionen chunk_split() hade jag missat. Är ju mycket enklare att använda, naturligtvis (är väl lite miljöskadad av allt Perl-kodande antar jag). :)

$string = ereg_replace("([^ \t\n\r\f]{15})([^ \t\n\r\f]*)", "\\1 \\2", $string);

Förklaring till vad ovanstående gör:

[^ \t\n\r\f] betyder att PHP skall leta efter alla tecken utom mellanslag, tabbar, radmatningar, "carriage returns" och "formfeed". Kort sagt, alla bokstäver, siffror och andra tecken som kan förekomma i ett ord. Sedan har jag angett att vi skall leta efter just 15 stycken sådana tecken i en följd, genom att sätta {15} efter. Genom att sätta en parantes runt det uttrycket kan vi senare hänvisa till det som hittades genom att skriva \\1 (\\1 för första parantesen, \\2 för andra parantesen o.s.v.). Vad ovanstående säger i klartext är alltså:

Plocka ut de första 15 tecknen som inte är mellanslag, radmatning (o.s.v.) och lägg det i \\1. Plocka ut alla efterföljande tecken, fram till nästa mellanslag, radmatning (o.s.v.) och lägg det i \\2. Ersätt sedan hela ordet med \\1[mellanslag]\\2, d.v.s. de första 15 bokstäverna i ordet, följt av ett mellanslag, följt av resten av ordet.

Men som sagt, chunk_split() är naturligtvis bättre att använda. :)

------------------
Robban < robban@lipogram.com >

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