匹配elisp中WORD的第一个字符

时间:2017-05-10 22:42:37

标签: elisp regex-negation

我想找到一个elisp正则表达式,它只找到单词的第一个字符(一组非空白字符)。

这就是我所拥有的:

\\(^\\|\\(:?\[[:space:]\]\\)\\)\[^\n[:space:]\]

它接近但不完全正确。 它捕获任何具有空格或位于行开头的非空白字符。但它也捕获了空白和行的开头。

我已经为特定的emacs方法编写了这个方法,该方法将elisp正则表达式作为参数,特别是avy - generic-jump。

这就是avy-generic-jump的样子:

'(avy--generic-jump REGEX WINDOW-FLIP STYLE &optional BEG END)'

这就是我现在所拥有的:

(avy--generic-jump "\\(?:^\\|\\(:?[[:space:]]\\)\\)[^\n[:space:]]" nil 'at))

主要问题:我可以做些什么来匹配elisp中单词的第一个字符?

更一般的问题:在你不想捕获整场比赛的情况下,处理elisp案件的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

最简单的正则表达式可能与单词边界匹配,然后是单词字符:

"\\b\\w"

使用isearch-forward-regexp

了解我的意思
C-M-s \b\w

如果要考虑符号的边界,可以使用:

"\\_<\\w"

尝试

C-M-s \_<\w
像phils说的那样,它取决于avy--generic-jump函数的作用。看起来它只是使用了Emacs Lisp函数re-search-forward,所以我认为上面应该有用。

请注意,您需要在Emacs正则表达式中使用双斜杠。所以你的第一次尝试应该是:

(avy--generic-jump "\\(?:^\\|\\(:?[[:space:]]\\)\\)[^\n[:space:]]" nil 'at))

答案 1 :(得分:0)

尝试在emacs中创建新的零宽度断言是不可能的。你基本上需要环顾四周的支持。你可以试试这个patch,或者不那么突兀,建议使用avy - generic-jump函数将结果位置候选者调整一个。

这是一个让avy跳出来的例子。

(defun avy--regex-candidates (regex &optional beg end pred group)
  "Return all elements that match REGEX.
Each element of the list is ((BEG . END) . WND)
When PRED is non-nil, it's a filter for matching point positions.
When GROUP is non-nil, (BEG . END) should delimit that regex group."
  (setq group (or group 0))
  (let ((case-fold-search (or avy-case-fold-search
                              (string= regex (downcase regex))))
        candidates)
    (avy-dowindows current-prefix-arg
      (dolist (pair (avy--find-visible-regions
                     (or beg (window-start))
                     (or end (window-end (selected-window) t))))
        (save-excursion
          (goto-char (car pair))
          (while (re-search-forward regex (cdr pair) t)
            (unless (get-char-property (1- (point)) 'invisible)
              (when (or (null pred)
                        (funcall pred))
                (push (cons (cons (1+ (match-beginning group))
                                  (1+ (match-end group)))
                            wnd) candidates)))))))
    (nreverse candidates)))