webForumDet fria alternativet

Söka värde i sträng

PHP

3 svar · 223 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej! Jag har ett problem med att jag inte vet hur jag ska lyckas söka åt en sträng i en text från mySQLdb:n och infoga en text efter den strängen

tex:

Jag har en text som ser ut såhär:

Hej!
----------------------------------------
svejs!
----------------------------------------
alla
----------------------------------------
roliga
----------------------------------------

då vill jag alltså söka reda på den näst sista streckade linjen och infoga en text efter den... tex:

Hej!
----------------------------------------
svejs!
----------------------------------------
alla
----------------------------------------
(här vill jag ha min text)
roliga
----------------------------------------

Hur i hela friden ska man lyckas med det?
ps. Alla streck är lika långa dvs. 40 st (-) minustecken

Medlem sedan aug. 20002 975 inlägg
#2

Testa med:

$linje = str_repeat('-', 40);

$new = "Ny text\n";

$pattern = "/((.*?{$linje}\\s*)+)(.*?{$linje}\\s*)$/s";

$text = preg_replace($pattern, "$1$new$3", $text);
Medlem sedan dec. 2003153 inlägg
#3

Om du inte ska ersätta texten utan lägga till kan du prova göra nåt sånt här.

Är det radbrytning efter varje linje? Annars får du ta bort den, använder radbrytning i exemplet.

$str = Texten från databasen;
$spl = "----------------------------------------\n";
$hit = Strängen som du söker efter och ska utöka;

$rows = explode($spl, $str);
foreach ( $rows as $v ) {
  if ($v == $hit) {
    // Här lägger du in texten å sparar det i $val, typ:
    $val = "mer text" . $v;
  }else{
    $val = $v;
  }
  $new[] = $val;
}

$str2 = implode($spl, $new);

// Lägg tillbaka $str2 i databasen

Om du däremot inte vet vad det är för text du ska utöka utan det alltid är den näst sista raden med streck du letar efter kan du prova:

$str = Texten från databasen;
$spl = "----------------------------------------\n";
$new_text = "(här vill jag ha min text)\n";

$rows = explode($spl, $str);
$num = count($rows);
$rows[($num - 2)] = $new_text . $rows[($num - 2)];

$str = implode($spl, $rows);

OT: Varför har de gjort så man inte längre kan använda PHP-taggen i forumet? Jag kan då inte använda den, får inga radbrytningar...

Medlem sedan mars 20011 346 inlägg
#4

lunne82: Det funkade juh kanonbra...tack!

matte: Fick inte ditt att fungera...den skrev inte ut nåt...

255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)