二重角かっこで囲まれたテキストをキャプチャする正規表現を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)))
これにより、ポイントが一致に移動することに注意してください。