2017-06-16 95 views
3

我目前已經進行了預替換以更改顯示在div中的單詞的顏色。PHP - 使用preg_replace在特定字符之後更改單詞的顏色

但是目前它僅僅是文本匹配。

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他們將變爲綠色(包括@符號,但只有直到字的末尾)

但是我不能硬編碼的話要打招呼,再見,因爲它們將永遠是不同的(這些將被用戶聲明的變量總是不同)。

那麼有沒有辦法在@符號後動態改變單詞的顏色?

我很抱歉,如果這沒有意義,我試圖解釋我最好的。

+0

使用正確的正則表達式,不是嗎? –

回答

2

我想這會做到這一點:

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

.+?是一個非貪婪的比賽,直到第\b這是一個字邊界(空間,而且字符,如,.和換行符)。

+0

太棒了,完美地完成了這項工作!一旦它允許我將標記爲答案(距離現在xD6分鐘) –