3

我想在 Emacs 中创建一个正则表达式来捕获双方括号之间的文本。

我找到了这个正则表达式。它允许在方括号之间查找字符串,但它包括方括号:

"\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]"

如何提取不包括方括号的双方括号之间的字符串?

4

3 回答 3

6

此正则表达式将选择方括号,但通过使用组 1,您将只能获取内容:"\\[\\[\\(.*\\)\\]\\]"

于 2012-08-08T14:15:36.683 回答
3

你不能。Emacs 的正则表达式引擎不支持前瞻/后瞻断言。

作为一项工作,只需将您感兴趣的部分分组并访问子组。

于 2012-08-08T13:03:34.683 回答
1

要从字符串中提取数据,请使用string-matchand match-string,如下所示:

(let ((my-string "[[some text][some more text]]")
      (my-regexp "\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]"))
  (and (string-match my-regexp my-string)
       (list (match-string 1 my-string) (match-string 3 my-string))))

评估为:

("some text" "some more text")

要从缓冲区中提取数据,请使用search-forward-regexp字符串参数并将其拖放到match-string

(and
 (search-forward-regexp "\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]" nil :no-error)
 (list (match-string 1) (match-string 3)))

请注意,此移动指向匹配。

于 2012-08-08T16:44:03.763 回答