我想在 Emacs 中创建一个正则表达式来捕获双方括号之间的文本。
我找到了这个正则表达式。它允许在方括号之间查找字符串,但它包括方括号:
"\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]"
如何提取不包括方括号的双方括号之间的字符串?
此正则表达式将选择方括号,但通过使用组 1,您将只能获取内容:"\\[\\[\\(.*\\)\\]\\]"
你不能。Emacs 的正则表达式引擎不支持前瞻/后瞻断言。
作为一项工作,只需将您感兴趣的部分分组并访问子组。
要从字符串中提取数据,请使用string-match
and 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)))
请注意,此移动指向匹配。