用于组织模式导出的自定义突出显示的替换正则表达式查询

replace-regexp query for custom highlighting for org-mode export

我正在尝试关注 this 博客 post 并将用户定义的文本标记添加到我的组织文件中,以便在我的 html 和 latex-pdf 导出中突出显示。

(let ((text (replace-regexp-in-string "[^\w]\(@\)[^\n\t\r]+\(@\)[^\w]" "\\hl{"  text nil nil 1 nil)))
        (replace-regexp-in-string "[^\w]\(\\hl{\)[^\n\t\r]+\(@\)[^\w]" "}" text nil nil 2 nil)))

(在 org-mode 中)我将要突出显示的文本包含在 @ 符号中,并为乳胶突出显示进行以下转换。

4 个输入的预期输出:

我的组织模式代码块用于测试 4 个案例的正则表达式逻辑:

#+begin_src emacs-lisp :tangle yes
    ; 4 regex cases to convert
    (setq mylist '("@highlight me@" "Bill@highlight me@" "@highlight me@Bob" "@highlight me@ and @highlight me@"))

    (defun highlight-attempt (text)
      "replace @text@ with \hl{text}"
        (let ((text (replace-regexp-in-string "[^\w]\(@\)" "}" text nil nil 1 nil)))
          (replace-regexp-in-string "\(^@\)[^\w]" "\\hl{" text nil nil 1 nil)))

  (mapcar 'highlight-attempt mylist)
  #+end_src

以上4个输入的当前输出:


博客使用了不正确的正则表达式,参考elisp regexps。 即 [^\w] 表示任何不是文字 \w 的东西 - \w[...] 中并不特殊。 elisp 中的替代项是 \W[^[:word:]]。我会使用另一种方法,只将文本保留在外部 '@'

之间
(replace-regexp-in-string
 "@\([^@]+\)@"
 ;; keep the inner text (match is '\1' in replacement)
 "\\hl{\1}"
 text)