---
title: "Preg_replace som ska sätta in rätt bildsökvägar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/131219-preg-replace-som-ska-sätta-in-rätt-bildsökvägar"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "lillebror"
published: "2005-07-09T18:28:34.000Z"
updated: "2005-11-16T23:00:31.000Z"
replies: 17
views: 465
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/131219-preg-replace-som-ska-sätta-in-rätt-bildsökvägar"
---

# Preg_replace som ska sätta in rätt bildsökvägar

## #1 — lillebror, 2005-07-09T18:28Z

Hej! Har ett litet problem jag skulle behöva lite hjälp med. 

Jag vill använda mig av en tagg som ser ut så här i mina artiklar som jag har lagrade i min databas: 
KLAMMERHÖGERIMGKLAMMARVÄNSTER1KLAMMERHÖGER/IMGKLAMMERVÄNSTER. Kunde inte skriva ut klamrarna eftersom wF använder sig av dessa. Sorry!

1 refererar till bildID i databastabellen. När en artikel nu laddas vill jag med preg_replace läsa av vilken siffra som står mellan taggarna så att jag kan anropa en annan funktion som hämtar ut sökvägen till aktuell bild samt bildbeskrivning med mera och skapar en färdig \<img src\>-tag som skriver över uttrycket jag beskrev ovan.

Med preg_match har jag lyckats få ut siffran som står mellan taggarna med följande regexp-uttryck:

```
preg_match("'\[IMG](.*?)\[\/IMG\]'",$text, $result);
```

Vet dock inte riktigt hur det fungerar när jag ska använda mig av preg_replace-funktionen. Någon som kan hjälpa mig på traven?  :)

Permalänk: https://www.webforum.nu/p/131219

## #2 — Matte, 2005-07-09T19:06Z

Om jag förstod dig rätt så borde det gå att köra något i stil med:

```
$text = preg_replace("/\[IMG](.*?)\[\/IMG]/ie", "funktionsnamn('$1')",$text);
```

Permalänk: https://www.webforum.nu/p/1641500

## #3 — lillebror, 2005-07-09T19:10Z

Tror att du förstod mig rätt. Vill att när jag finner IMG-uttrycket ska först siffran som står där imellan läsas av och skickas till en funktion som returnerar en sträng med rätt länk som ersätter hela IMG-uttrycker med klamrar och allt! Klarar preg_replace av det? Eller måste jag använda mig av preg_match för att först hitta och läsa av siffran? :OO

Permalänk: https://www.webforum.nu/p/1641504

## #4 — Matte, 2005-07-09T19:26Z

preg_replace ska klara av det. Ett exempel:

```
function myFunc($num)
{
   return $num * 100;
}

$text = "Mary had &#091;IMG]22[/IMG] little lamb.";

$text = preg_replace("/\[IMG](.*?)\[\/IMG]/ie", "myFunc('$1')",$text);

echo $text;
```

Permalänk: https://www.webforum.nu/p/1641510

## #5 — lillebror, 2005-07-09T20:58Z

> **Matte skrev:**
>
> preg_replace ska klara av det. Ett exempel:
>
>
> ```
> function myFunc($num)
> {
>    return $num * 100;
> }
> 
> $text = "Mary had &#091;IMG]22[/IMG] little lamb.";
> 
> $text = preg_replace("/\[IMG](.*?)\[\/IMG]/ie", "myFunc('$1')",$text);
> 
> echo $text;
> ```

Jag e helt med på ditt exempel så när som på en liten sak. När man nu kör preg_replace och den upptäcker den första IMG-taggen ska den ju "fånga upp" 22 så att myFunc i sin tur kan matas med det numret eftersom det symboliserar ID-numret på en bild.

Som det är nu, vilket variabel innehåller värdet "22"?

Permalänk: https://www.webforum.nu/p/1641520

## #6 — Matte, 2005-07-10T10:06Z

Första parentesens värde, representeras av $1.

Permalänk: https://www.webforum.nu/p/1641577

## #7 — lillebror, 2005-07-10T10:24Z

> **Matte skrev:**
>
> Första parentesens värde, representeras av $1.

Är det så funktionen preg_replace är uppbyggd, att resultatet från regexp-uttrycket alltid matas till variabeln $1?

Permalänk: https://www.webforum.nu/p/1641580

## #8 — Matte, 2005-07-10T10:31Z

Hela uttrycket i $0, första parentesen i $1, andra parentesen i $2 o.s.v.

Permalänk: https://www.webforum.nu/p/1641582

## #9 — lillebror, 2005-07-10T10:51Z

Det fungerar klockrent Matte! Tack så jättemycket för hjälpen.  :)

Permalänk: https://www.webforum.nu/p/1641585

## #10 — lillebror, 2005-11-16T20:06Z

Jag fortsätter på denna tråd då mitt nuvarande problem är en fortsättning på detta som beskrivits ovan. Som det är nu går detta preg_match-uttryck igenom en hel artikel/textmassa och plockar ut alla nummer som finns omslutet av IMG-taggar. Nu håller jag på och skapar en "Senaste artikel-funtion" till min första sida som visar de 3 senaste artiklarna. Nu tänkte jag ha med en bild till varje artikel för att göra sidan mer levande.

Det jag skulle vilja åstadkomma är en variant på nuvarande uttryck så att preg_match-funktionen enbart plockar ut det första siffervärdet i en IMG-tag så att jag sedan kan matcha detta värde mot rätt bild i databasen. Hur kan man lösa detta?!

  :)

Permalänk: https://www.webforum.nu/p/1711471

## #11 — Matte, 2005-11-16T20:35Z

Om jag förstod dig rätt så vill du hämta värdet i den första img-taggen i texten ?

Då borde det funka med något i den här stilen:

```php
preg_match("/\[IMG](.*?)\[\/IMG]/i", $text, $match);

$bild = !empty($match[1]) ? $match[1] : 'default';
// Fanns ingen img-tagg, använd default-bild
```

Permalänk: https://www.webforum.nu/p/1711495

## #12 — lillebror, 2005-11-16T21:41Z

> **Matte skrev:**
>
> Om jag förstod dig rätt så vill du hämta värdet i den första img-taggen i texten ?

Ja, det är helt rätt!

> **Matte skrev:**
>
> ```php
> preg_match("/\[IMG](.*?)\[\/IMG]/i", $text, $match);
> 
> $bild = !empty($match[1]) ? $match[1] : 'default';
> // Fanns ingen img-tagg, använd default-bild
> ```

Hur fungerar detta uttryck med empty ? $match och default?

Permalänk: https://www.webforum.nu/p/1711539

## #13 — aasah, 2005-11-16T21:46Z

> **lillebror skrev:**
>
> ```php
> $bild = !empty($match[1]) ? $match[1] : 'default';
> ```
>
> Hur fungerar detta uttryck med empty ? $match och default?

```php
villkor ? om_sant : om_falskt
```

motsvarar:

```php
if (villkor) om_sant
else om_falskt
```

Alltså:
!empty($match\[1\]) ? .... \<--\> Om $match\[1\] inte är tom, använd den, annars en defaultbild. :)

Permalänk: https://www.webforum.nu/p/1711543

## #14 — lillebror, 2005-11-16T22:17Z

Funktionen fungerar bra om man kollar på sidan <https://www.flygfyren.nu/index.php>. Dock är det en artikel som inte har någon img-tag i sig med bildnummer och det blir knas när $bild-variabeln kommer tom till SQL-satsen. Försökte förebygga det med en if-sats men det blir något fel ändå.

Någon som ser vad det är i koden:

```
preg_match("/\[IMG](.*?)\[\/IMG]/i", $article['content'], $match);
$bild = !empty($match[1]) ? $match[1] : 'default'; 
#echo "Bildnummer: ".$bild;		
if($bild <> '') { 
$sqlSelect = "SELECT * FROM tblpicturesthumbnails where thumbnailID = ".$bild."";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
$picture = mysql_fetch_array($RSobj);
} else {
$picture = NULL;
}
```

Permalänk: https://www.webforum.nu/p/1711566

## #15 — aasah, 2005-11-16T22:29Z

Ja, alltså, vill du att det ska stå 'default' om ingen bild finns? Jag tror Matte menade att du skulle ersätta den texten med vad du vill ska hända då? :q

Så som det för närvarande ser ut borde det nog bli:

```php
if ($bild != 'default') { //i stället för != ''
  //...
}
else {
  $picture = NULL;
}
```

Permalänk: https://www.webforum.nu/p/1711575

## #16 — lillebror, 2005-11-16T22:35Z

Får fortfarande detta fel i SQLn:

```
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
```

Detta tolkar jag som att SQL-satsen får fel invariabel som den inte kan hantera...

Permalänk: https://www.webforum.nu/p/1711582

## #17 — Matte, 2005-11-16T22:59Z

Ändra till:

```php
$bild = !empty($match[1]) ? $match[1] : '';
```

Permalänk: https://www.webforum.nu/p/1711599

## #18 — lillebror, 2005-11-16T23:00Z

Problemet löste sig...ändrade lite på ett villkor i if-satsen som skriver ut bilden...

Nu fungerar det fint!

Tack för hjälpen!

Permalänk: https://www.webforum.nu/p/1711601

---

Tråden på webben: https://www.webforum.nu/amne/php/131219-preg-replace-som-ska-sätta-in-rätt-bildsökvägar
