scramble cadenza

技術ネタのガラクタ置き場

elisp で正規表現にマッチした部分の抽出

ruby で言うと

url = "https://www.google.co.jp/"
$1 if url =~ /https:\/\/(.*)\//
#=> "www.google.co.jp"

みたいなことをしたい。

elisp だと以下のように書く。

(setq url "https://www.google.co.jp/")
(string-match "https:\\/\\/\\(.*\\)\\/" url)
(match-string 1 url)
#=> "www.google.co.jp"
  • string-match
    • 第一引数に正規表現、第二引数にチェックしたい文字列
    • マッチに失敗したら nil が返る
  • match-string
    • 第一引数にマッチした箇所、第二引数に文字列
    • 最後にマッチを行った部分の抽出を行う。

例の中の match-string の引数「1」は $1 と同じ意味。
() でくくったグループが複数あるなら、順に 2, 3, ... となっていく。0 はマッチした自分自身を返す。

まとめ

  • 名前似ててややこしい
  • ruby で言うと...
    • string-match ≒ String#match (まんまや!)
    • match-string ≒ String#=~

参考