Hej!
Jag är inte så bra på reguljära uttryck och behöver hjälp med följande:
Jag vill att den inte ska kolla innanför < > taggar i $text.
Som ni ser så lägger den in en förklaring för ett visst ord. Dock om t.ex. en bild som ligger innanför <> har ordet så ska den inte lägga in en förklaring.
$text = preg_replace ( "/(.*?)($ordet)(.*?)/is", "\\1<acronym title=\"$forklaring\">$ordet</acronym>\\3", $text );
Någon som har en bra ide på hur man kan göra?
GuffaMedlem sedan juni 2004533 inlägg Gör ett uttryck som matchar en <>-tagg och gör en matchning på det. Loopa igenom resultatet och gör ersättningen på den text som ligger mellan taggarna.
Guffa skrev:
Gör ett uttryck som matchar en <>-tagg
det är precis den jag behöver hjälp med :) är som sagt inte så haj på regexpar..
GuffaMedlem sedan juni 2004533 inlägg <.+?>
. = vilket tecken som helst
+ = en eller flera
+? = en eller flera, men så få som möjligt
tack, känns som det börjar närma sig en lösning:
Dock måste den se om $ordet finns innom <>-taggarna om $ordet finns så ska den hoppa över att förklara ett ord..
function forklaraOrd($text){
$sql = mysql_query("SELECT Ord, Forklaring FROM Ord");
while($ord = mysql_fetch_array($sql)){
$ordet = $ord['Ord'];
$forklaring = $ord['Forklaring'];
if(!preg_match('/<.+?$ordet.+?)>/is', $text)) { <-- FUNKAR INTE RIKTIGT SOM JAG VILL
$text = preg_replace ( "/(.*?)($ordet)(.*?)/is", "\\1<acronym title=\"$forklaring\"><span>$ordet</span></acronym>\\3", $text );
}
}
return $text;
}
GuffaMedlem sedan juni 2004533 inlägg Eftersom mina kunskaper i PHP är i stort sett noll så kan jag inte hjälpa dig med exakt hur lösningen ser ut.
Principen är i alla fall att du gör en matchning på uttrycket så att du får tillbaka en resultat som talar om vilka taggar som hittades och var i strängen de finns. Du kan då loopa igenom dessa och plocka ut den text som finns mellan taggarna.
Eftersom du eventuellt ska förändra texten mellan taggarna så måste du bygga ihop en helt ny sträng som består av de taggar du hittade, och texten mellan taggarna.
Jag har skrivit en artikel om hur man gör detta i ASP, om du har någon användning av det:
http://guffa.com.loopiadns.com/Programming_article.asp?id=5