正規表現オブジェクトは
#/〜/と正規表現リテラルで記述するか、
(string->regexp "〜")と文字列からの変換することで作成できる。
パターンマッチは
(rxmatch 正規表現 文字列)または
(正規表現 文字列)でテストできる。マッチしたら<regmatch>オブジェクト、しなかったら#f。
<regmatch>オブジェクトから一致した部分文字列等を取り出すにはrxmatch-*系の関数が使えるが、正規表現オブジェクトと同様に、<regmatch>オブジェクトも関数のように使用可能。
Rubyでいうところの以下のような処理は
if /(\w+)=(\w+)/ ~= stringGaucheでは以下のように書ける。
name = $1
value = $2
end
(let
((match (#/(\w+)=(\w+)/ string)))
(if match (begin
(set! name (match 1))
(set! value (match 2)))))
置換は
(regexp-replace 正規表現 元の文字列 置換文字列)
(regexp-replace-all 正規表現 元の文字列 置換文字列)
でできる。regexp-replaceは最初にマッチした部分のみを置換。regexp-replace-allは全てのマッチした部分を置換。置換文字列の代わりに1引数のプロシージャを与えると、マッチした部分を単純に文字列で置換する代わりに、<regmatch>オブジェクトを引数としてそのプロシージャを呼び出した結果で置換する。
0 件のコメント:
コメントを投稿