PHP - 使用preg_replace更改特定字符后的单词颜色

时间:2017-06-16 13:06:41

标签: php sql

我目前已经进行了preg-replace以更改div中显示的单词的颜色。

但目前它只是文本匹配。

if (sqlsrv_has_rows($stmt)) 
        {
            $data = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC);

            echo "<div class='custom-font title-container'>
                    <div class='expand-button-container fa fa-expand' onclick='expandWindow()'></div>
                    <div id='title-container1'><div class='edit-note fa fa-pencil' onclick='editSQLNote()'>&nbsp;&nbsp;&nbsp;</div>" . "<div data-toggle='modal' data-target='#editSQLNoteNameModal' class='display-inline'>" . $data['SQLNoteName'] . "</div>" . "&nbsp;<div class='save-note fa fa-thumbs-up' onclick='saveSQLNote(); submitSQLNoteText();'></div></div>
                  </div>";

            $note = nl2br($data['SQLNote']);
            $note = preg_replace('%(SELECT|FROM|WHERE|INNER|JOIN|DISTINCT|LEFT|OUTER|APPLY|WITH|NOLOCK|DECLARE|ORDER BY|VARCHAR|bit)%m', '<span style="color: red;">$1</span>', $note);
            $note = preg_replace('%(ISNULL|UPDATE|SET|INSERT INTO)%m', '<span style="color: #9A2EFE;">$1</span>', $note);          
            $note = preg_replace('%(IS NOT NULL|AND|IS NULL)%m', '<span style="color: grey;">$1</span>', $note);
            $note = preg_replace('%(BEGIN TRAN|ROLLBACK TRAN|BEGIN|END|CASE|END|WHEN|THEN|ELSE)%m', '<span style="color: blue;">$1</span>', $note);
            $note = preg_replace('%(GETDATE|MAX|CONVERT|UPDATE|CAST|COUNT)%m', '<span style="color: #FA58F4;">$1</span>', $note);

            echo "<div contenteditable='true' id='ta4'>" . $note . "</div>";
        } 
        else 
        {
            echo "No data found";
        }

但是我想知道是否有办法,如果我把一个@符号放在下一个单词的位置,直到颜色变化后的空格。

所以,如果我把@hello和@goodbye改成绿色(包括@符号,但直到字的结尾)

然而,我不能硬编码这些词是你好和再见,因为它们总是不同的(这些将由用户声明变量,所以总是不同)。

那么有没有办法动态改变@符号后的单词颜色?

如果这没有意义,我道歉,我试着尽力解释。

1 个答案:

答案 0 :(得分:2)

我认为这样做会:

$note = preg_replace('%(@.+?\b)%m', '<span style="color: green;">$1</span>', $note);

.+?是一个非贪婪的匹配,直到第一个\b为单词边界(空格,但也包括,.和换行符等字符。