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

时间:2012-08-08 13:01:21

标签: regex emacs

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

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

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

如何在方括号之外的双方括号之间提取字符串?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

你做不到。 Emacs的regexp引擎不支持预见/后视断言。

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

答案 2 :(得分:1)

要从字符串中提取数据,请使用string-matchmatch-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)))

请注意,这会移动指向匹配。