Bu regex ile yanlış anlamaya olamaz

0 Cevap php

Burada Regex acemi. Ben düzeltmek için çalışılıyor kullanan forum yazılımı için (kırık) eklenti var. Bu aşağıdaki regex üreten bulunuyor:

/(?:\s|^)\[(?:\:\)\]|;\)\])(?:\s|$)/m

... Kullanarak bir metin bloğunda [:)] veya [;)] tüm örneklerini değiştirmek için preg_replace(). Ancak, [:)] veya [;)] örneklerini yerine değil. Herhangi bir fikir?

EDIT: Söz eklentisi Vanilya, Emoticons olduğunu. İşte kodu (ilgisiz bölümleri ve e-posta adresleri kaldırıldı) bulunuyor:

    // Build an Array containing the Emoticon<-->Graphic matches
    if (!isset($EmoticonMatch))
    {
        $EmoticonMatch = array(
            '[:)]'  => 'smile.gif',
            '[;)]'  => 'wink.gif',
        ); // Add more matches, if you need them... Put the corresponding graphics into the Plugin's images-folder
    }

    // In case there's something wrong with the Array, exit the Function
    if (count($EmoticonMatch) == 0)
        return;

    // Define the basic Regex pattern to find Emoticons
    $EmoticonsSearch = '/(?:\s|^)';

    // Automatically extend the Regex pattern based on the Emoticon-Codes in the $EmoticonMatch-Array
    $subchar = '';
    foreach ( (array) $EmoticonMatch as $Smiley => $Img ) {
        $firstchar = substr($Smiley, 0, 1);
        $rest = substr($Smiley, 1);

        // new subpattern?
        if ($firstchar != $subchar) {
            if ($subchar != '') {
                $EmoticonsSearch .= ')|(?:\s|^)';
            }
            $subchar = $firstchar;
            $EmoticonsSearch .= preg_quote($firstchar, '/') . '(?:';
        } else {
            $EmoticonsSearch .= '|';
        }
        $EmoticonsSearch .= preg_quote($rest, '/');
    }

    // Add final Regex pattern to the Search-Variable
    $EmoticonsSearch .= ')(?:\s|$)/m';

}


/**
 * Hack the Discussion-Controller to replace Text with Smilies before output
 * 
 * @since 1.0
 * @version 1.0
 * @author Oliver Raduner
 *
 * @uses Initialize()
 * @uses FindEmoticon()
 */
public function DiscussionController_BeforeCommentDisplay_Handler(&$Sender)
{
    // Get the current Discussion and Comments
    $Discussion = &$Sender->EventArguments['Discussion'];
    $Comment = &$Sender->EventArguments['Comment'];

    // Initialize the our Emoticons-Stuff
    $this->Initialize();

    // Replace Emoticons in the Discussion and all Comments to it
    $Discussion->Body = $this->FindEmoticon($Discussion->Body);
    $Comment->Body = $this->FindEmoticon($Comment->Body);
}


/**
 * Search through a Text and find any occurence of an Emoticon
 *
 * @since 1.0
 * @version 1.0
 * @author Oliver Raduner
 *
 * @uses $EmoticonImgTag()
 * @global array $EmoticonsSearch()
 * @param string $Text Content to convert Emoticons from.
 * @return string Converted string with text emoticons replaced by <img>-tag.
 */
public function FindEmoticon($Text)
{
    global $EmoticonsSearch;

    $Output = '';
    $Content = '';

    // Check if the Emoticons-Searchstring has been set properly
    if (!empty($EmoticonsSearch) )
    {
        $TextArr = preg_split("/(<.*>)/U", $Text, -1, PREG_SPLIT_DELIM_CAPTURE); // Capture the Tags as well as in between
        $Stop = count($TextArr);

        for ($i = 0; $i < $Stop; $i++)
        {
            $Content = $TextArr[$i];

            // Check if it's not a HTML-Tag
            if ((strlen($Content) > 0) && ('<' != $Content{0}))
            {
                // Documentation about preg_replace_callback: http://php.net/manual/en/function.preg-replace-callback.php
                $Content = preg_replace_callback($EmoticonsSearch, array(&$this, 'EmoticonImgTag'), $Content);
            }

            $Output .= $Content;
        }

    } else {
        // Return default text.
        $Output = $Text;
    }

    return $Output;
}


/**
 * Translate an Emoticon Code into a <img> HTML-tag
 * 
 * @since 1.0
 * @version 1.0
 * @author Oliver Raduner
 * 
 * @global array $EmoticonMatch
 * @param string $Emoticon The Emoticon Code to convert to image.
 * @return string HTML-Image-Tag string for the emoticon.
 */
public function EmoticonImgTag($Emoticon)
{
    global $EmoticonMatch;

    $PluginRoot =  Gdn::Config('Garden.WebRoot'). 'plugins' . DS . 'Emoticons' . DS;

    if (count($Emoticon) == 0) {
        return '';
    }

    $Emoticon = trim(reset($Emoticon));
    $Img = $EmoticonMatch[$Emoticon];
    $EmoticonMasked = $Emoticon;

    return ' <img src="'.$PluginRoot.'images'.DS.$Img.'" alt="'.$EmoticonMasked.'" class="emoticon" /> ';
}

?>

0 Cevap