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);
17 svar · 460 visningar · startad av lillebror
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? :)
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);
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
preg_replace ska klara av det. Ett exempel:
function myFunc($num)
{
return $num * 100;
}
$text = "Mary had [IMG]22[/IMG] little lamb.";
$text = preg_replace("/\[IMG](.*?)\[\/IMG]/ie", "myFunc('$1')",$text);
echo $text;
Matte skrev:
preg_replace ska klara av det. Ett exempel:
function myFunc($num) { return $num * 100; } $text = "Mary had [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"?
Första parentesens värde, representeras av $1.
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?
Hela uttrycket i $0, första parentesen i $1, andra parentesen i $2 o.s.v.
Det fungerar klockrent Matte! Tack så jättemycket för hjälpen. :)
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?!
:)
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:
preg_match("/\[IMG](.*?)\[\/IMG]/i", $text, $match);
$bild = !empty($match[1]) ? $match[1] : 'default';
// Fanns ingen img-tagg, använd default-bild
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:
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?
lillebror skrev:
$bild = !empty($match[1]) ? $match[1] : 'default';Hur fungerar detta uttryck med empty ? $match och default?
villkor ? om_sant : om_falskt
motsvarar:
if (villkor) om_sant
else om_falskt
Alltså:
!empty($match[1]) ? .... <--> Om $match[1] inte är tom, använd den, annars en defaultbild. :)
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;
}
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:
if ($bild != 'default') { //i stället för != ''
//...
}
else {
$picture = NULL;
}
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...
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!