Page 1
Emacsと正規表現
Regular expressions in Emacs
Regex Festa
2019-10-18 #regexfesta
公開日:
by USAMI Kenta @tadsan
に東京都千代田区のオプトカフェ(株式会社オプト)で開催された『Regex Festa』で15分枠として発表しました。
Emacsと正規表現
Regular expressions in Emacs
Regex Festa
2019-10-18 #regexfesta
お前誰よ
うさみけんた (@tadsan)
/ Zonu.EXE
せっかくなので PHPの話を先に
PHPには複数の
正規表現エンジンが
あります
ereg (POSIX ERE)
preg (PCRE) mb_ereg (鬼車)
PHP5系で廃止
ereg (POSIX ERE)
preg (PCRE) mb_ereg (鬼車)
現代のPHPでは
preg関数(PCRE)
が一般的
PHPには正規表現
リテラルがない
(そもそも複数エンジン があるのでリテラルで 特権扱いされると困る)
バックスラッシュのエスケープ
<?php
$subject = 'a\b';
preg_match('/(?<bs>\\\\)/', $subject, $m);
var_dump($m['bs']);
// string(1) "\"
デリミタの変更
<?php
$subject = 'https://example.com/';
// Bad pattern
preg_match('/^https:\/\/([.+])/i', $subject);
preg_match('@^https://([.+])@i', $subject); preg_match('#^https://([.+])#i', $subject);
関数形式だがコンパ イル結果は内部的に
保持されている
PCRE関数はリクエ
ストをまたいでコンパ イル結果が保持される
PHPの話ここまで
Emacs
Emacsは正規表現
でできている
1. エディタの 検索機能として
2. 構文ハイライト
出典: フリー百科事典『ウィキペディア(Wikipedia)』
https://ja.wikipedia.org/wiki/正規表現
最終更新 2019年7月9日 12:45 版
出典: フリー百科事典『ウィキペディア(Wikipedia)』
https://ja.wikipedia.org/wiki/正規表現
最終更新 2019年7月9日 12:45 版
出典: フリー百科事典『ウィキペディア(Wikipedia)』
https://ja.wikipedia.org/wiki/正規表現
最終更新 2019年7月9日 12:45 版
これしか書いてない
基本正規表現とも 拡張正規表現とも
違う
Emacsの正規表現は
NFAに分類される (最小量指定子がある)
基本 拡張 Emacs
グループ \(regexp\) (regexp) \(regexp\)
繰り返し \{n,m} {n,m} \{n,m}
文字クラス [abc] [abc] [abc]
1回以上 + +
選言 | \|
Perl Emacs
先頭・末尾 \A \z \` \'
単語構成文字
\w \b \w \b
/単語境界
[[:space:]]
空白文字 \s
\s-
僕の知ってる
正規表現と違う!
シンタックス
テーブル
メジャーモードごと
に文字の意味を 定義できる機能
言語ごとにシンボル
構成文字は異なる
Lispでは foo-bar は一つのシンボル (変数名や関数名になる)
Cなどの言語では
foo-barは別シンボル
(foo - bar)
その構文情報
を
(syntax table)
正規表現から使える
逆に言うと正規表現の
マッチ結果はシンタック
ステーブルに依存する
で、実際どうなの
文脈によって エスケープが
変わってる
(ように見える)
Emacsのメジャー
モード(言語モード)の 実装には大量の正規表
現を書く必要がある
これは読みにくい
でもご安心ください
rxという正規表現
組み立てDSLがある
文字列 rx
グループ \(regexp\) (group "regexp")
繰り返し \{n,m} (repeat n m pattern)
文字クラス [abc] (in "abc")
1回以上 + (+ pattern)
選言 \| (or a b)
文字列 rx
string-start
先頭・末尾 \` \'
string-end
単語構成文字 wordchar
\w \b
/単語境界 word-boundary
[[:space:]] space
空白文字
\s- (syntax whitespace)
ツールはいろいろ
揃ってる
re-builder
(Emacs標準添付)
font-lock-studio (強調表示の色付けを順番
に実行してくれる)