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