簡體   English   中英

C ++運算符的font-lock-add-keywords regexp

[英]font-lock-add-keywords regexp for C++ operators

我有一個正則表達式,可以查找和突出顯示C ++中的運算符,但是我一生無法解決如何使用正則表達式來匹配operator[] 轉義字符的通常技巧似乎沒有用,只是結束了匹配。

    (font-lock-add-keywords
     nil '(
       ;; operators
       ("[~^&\|!<>:=,.\\+*/%-]" . font-lock-keyword-face) ))

我第二次(不完全)嘗試使用regexp-builder並將轉義的符號移動到比賽的結尾,這給了我開場大括號:

    ("[~^=<>&/.,\[\|\*\+\-]" . font-lock-keyword-face)

但是添加\\]或移動\\[殺死所有匹配項。 我想念什么?

我為此使用regexp-opt ,因為它更具可讀性。 相關配置:

(setq operators-font-lock-spec
      (cons (regexp-opt '("+" "-" "*" "/" "%" "!"
                          "&" "^" "~" "|"
                          "=" "<" ">"
                          "." "," ";" ":" "?"))
            (list
             0 ;; use whole match
             'font-lock-builtin-face
             'keep ;; OVERRIDE
             )))

(setq brackets-font-lock-spec
      (cons (regexp-opt '("(" ")" "[" "]" "{" "}"))
            (list
             0 ;; use whole match
             'font-lock-bracket-face
             'keep ;; OVERRIDE
             )))

(font-lock-add-keywords
 'c++-mode
 (list
  operators-font-lock-spec
  brackets-font-lock-spec
  (cons c-types-regexp 'font-lock-type-face)))

brackets-font-lock-spec是分開的,因為我為它們使用了不同的外觀。

要匹配文字] ,請將其放在開頭[

"[]~^=<>&/.,\[\|\*\+\-]"

由於空字符選擇在正則表達式中沒有任何意義,因此此組合具有匹配實際]的替代解釋。

您需要兩個連續的反斜杠來使文字字符串中的正則表達式轉義一個字符,即

"[]~^&|!<>:=,.+\\[*/%-]"

Emacs Lisp閱讀器在解析字符串文字時會解釋一個反斜杠,並表示轉義序列,例如\\n表示換行符。 如果在這種情況下反斜杠沒有開始一個已知的轉義序列( \\[不是特殊字符),則僅刪除反斜杠。 在這種情況下,單個[最終會出現在結果字符串中,這將創建無效的正則表達式,從而阻止其匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM