В настоящее время у меня есть предварительная замена, чтобы изменить цвета слов, отображаемых в 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, они станут зелеными (включая символ @, но только до конца слова)

Однако я не могу жестко закодировать слова для приветствия и до свидания, потому что они всегда будут разными (они будут объявлены переменными пользователем, поэтому всегда разные).

Так есть ли способ динамически изменять цвет слов после символа @?

Прошу прощения, если это не имеет смысла, я попытался объяснить все, что мог.

4
Luke Litherland 16 Июн 2017 в 16:06
Используйте правильное регулярное выражение, не так ли?
 – 
u_mulder
16 Июн 2017 в 16:09

1 ответ

Лучший ответ

Думаю, это сработает:

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

.+? не является жадным совпадением до первого \b, который является границей слова (пробел, но также символы, такие как ,, . и новая строка).

3
Halcyon 16 Июн 2017 в 16:10
Потрясающе, отлично справились со своей задачей! Отметим как ответ, как только это позволит мне (через 6 минут xD)
 – 
Luke Litherland
16 Июн 2017 в 16:15