> What I'm trying to do:
> 
> I'm trying to have the proper variables for the eregi_replace so that each
> word in the $dico array is replaced by a link to its definition respecting
> the following rules :
> -only exact match makes a link to the definition, for example :
>      - "abaisseraient" doesn't make a link
>      - "reabaisser" doesn't make a link
>      - " abaisser," or "smthg.Abaisser " makes a link on "abaisser" only,
> so that the whitespace, comma or dot isn't part of the link
>      - "abaisser" a the end of the string make a link
> 
> -I don't want to make a link when already in a link :
>      - "<a href='some_page.php'>tu peux abaisser le levier</a>" doesn't not
> make a link on "abaisser"
> 
> I know I'm bad with regex and really need some help on this. This would be
> really appreciated.

I gave it my best, I could not figure out how to do it in a single
regex.  You could make this code more efficient but I think this might
do what you want.

<?
$dico = array(
    "abaisser"     =>   "def.php?id=9",
    "singer"       =>   "def.php?id=9"
);

$texte = "Abaisser Vous abaisserez la pate, abaisser.Singer Abaisser
Vous abaisserez la pate,<a href=\"some_page.php\">
abaisser.Singer</a>singer<a href=\"some_page_other.php\">
abaisser.Singer</a>";
echo $texte."<br />\n";
preg_match_all('/<a\s+.*?href=[\"\'\s]?.*?>.*?<\/a>/i', $texte, $matches);

if (is_array($matches[0])) {
$counter = 0;
foreach ($matches[0] as $value){
        $texte = str_replace ( $value, " REPLACEME$counter ", $texte);
        $counter++;
}
}


foreach ($dico as $mot => $def) {
        $pattern = '/('.$mot.'\b)/i';   
        print "$pattern<br />\n";
        $texte = preg_replace($pattern,"<a href=\"$def\">$1</a>",$texte);       
}

if (is_array($matches[0])) {
$counter = 0;
foreach ($matches[0] as $value){
        $texte = str_replace ( " REPLACEME$counter ", $value, $texte);
        $counter++;
}
}

echo $texte;

?>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to