39
書こう!正規表現 vol.1 正規表現 is

書こう!正規表現 vol.1 正規表現 is 何

Embed Size (px)

Citation preview

Page 1: 書こう!正規表現 vol.1 正規表現 is 何

書こう!正規表現vol.1 正規表現 is 何

Page 2: 書こう!正規表現 vol.1 正規表現 is 何

このシリーズは

オライリー 「詳説 正規表現」を半ばなぞっていきます

Page 3: 書こう!正規表現 vol.1 正規表現 is 何

このシリーズは

オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい

Page 4: 書こう!正規表現 vol.1 正規表現 is 何

このシリーズは

オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい

・復習する

Page 5: 書こう!正規表現 vol.1 正規表現 is 何

このシリーズは

オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい

・復習する・そこはそうじゃないと突っ込む

Page 6: 書こう!正規表現 vol.1 正規表現 is 何

このシリーズは

オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい

・復習する・そこはそうじゃないと突っ込む・当時の甘酸っぱい思い出に浸る

Page 7: 書こう!正規表現 vol.1 正規表現 is 何

Wikipedia曰く

Page 8: 書こう!正規表現 vol.1 正規表現 is 何

正規表現(せいきひょうげん、英: regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。

Page 9: 書こう!正規表現 vol.1 正規表現 is 何

??

Page 10: 書こう!正規表現 vol.1 正規表現 is 何

正規表現(せいきひょうげん、英: regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。(中略)もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。

Page 11: 書こう!正規表現 vol.1 正規表現 is 何

???

Page 12: 書こう!正規表現 vol.1 正規表現 is 何

要するに

Page 13: 書こう!正規表現 vol.1 正規表現 is 何

スゴイglob(或いはワイルドカード)

Page 14: 書こう!正規表現 vol.1 正規表現 is 何

./**.txtfoo.00?*example.com

スゴイglob(或いはワイルドカード)

Page 15: 書こう!正規表現 vol.1 正規表現 is 何

./**.txtfoo.00?*example.com

スゴイglob(或いはワイルドカード)

ここが似ている・(割と)どこでも使える・パターンにマッチさせる

Page 16: 書こう!正規表現 vol.1 正規表現 is 何

./**.txtfoo.00?*example.com

スゴイglob(或いはワイルドカード)

ここが似ている・(割と)どこでも使える・パターンにマッチさせる

ここが似ていない・もっと複雑なことができる・メタ文字の意味など、マッチングのルール・対象は基本的に一行の文字列

Page 17: 書こう!正規表現 vol.1 正規表現 is 何

何に使うの?

Page 18: 書こう!正規表現 vol.1 正規表現 is 何

何に使うの?

一般に、あるパターンの検索や置換に使う

Page 19: 書こう!正規表現 vol.1 正規表現 is 何

何に使うの?

一般に、あるパターンの検索や置換に使う

例えば・コードの山からIPアドレスっぽいものを全て見つける・<img src=”...”>を全て <a href=”...”><img src=”...”></a> に置換する・空行以外の全行末に「。」を追加する

Page 20: 書こう!正規表現 vol.1 正規表現 is 何

何に使うの?

一般に、あるパターンの検索や置換に使う

例えば・コードの山からIPアドレスっぽいものを全て見つける・<img src=”...”>を全て <a href=”...”><img src=”...”></a> に置換する・空行以外の全行末に「。」を追加する

複雑で難解な正規表現もあるし、その使い所もあるが、簡単な正規表現でもかなり使える

Page 21: 書こう!正規表現 vol.1 正規表現 is 何

どこで使えるの?

Page 22: 書こう!正規表現 vol.1 正規表現 is 何

どこで使えるの?

・多くのプログラミング言語・sed, grepなどのLinuxコマンド・高機能なテキストエディタetc...

Page 23: 書こう!正規表現 vol.1 正規表現 is 何

どこで使えるの?

・多くのプログラミング言語・sed, grepなどのLinuxコマンド・高機能なテキストエディタetc...

実装に差がある場合もあるが、かなり色々なところで利用可能

Page 24: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字

Page 25: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

Page 26: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

Page 27: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

つまり、超文字

Page 28: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

つまり、超文字超すごいとか超余裕とか超兄貴の仲間

Page 29: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく

Page 30: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく超音速とか超弩級とか超人とかの仲間

Page 31: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく超音速とか超弩級とか超人とかの仲間

即ち、文字を超えた文字、文字でありながら文字でないもの表示される文字それ自体を表しているわけでないもの

Page 32: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

meta: 超

つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく超音速とか超弩級とか超人とかの仲間

即ち、文字を超えた文字、文字でありながら文字でないもの表示される文字それ自体を表しているわけでないもの

globでいえば、 メタ文字 * は「*」という文字それ自体ではなく、

「任意の文字」という概念を表している

Page 33: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

逆に言うと、メタ文字でない文字は全てただの文字(リテラル)である

Page 34: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

逆に言うと、メタ文字でない文字は全てただの文字(リテラル)である

globでいえば、*.txt の * 以外の文字は文字をそのまま表している

Page 35: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字とは

逆に言うと、メタ文字でない文字は全てただの文字(リテラル)である

globでいえば、*.txt の * 以外の文字は文字をそのまま表している

いかに意味ありげな記号でも、いかに制御構造っぽいつながりの単語でも、メタ文字でなければそれはリテラルであって、見た目通りの文字を表す意味しか持たない

Page 36: 書こう!正規表現 vol.1 正規表現 is 何

メタ文字

Page 37: 書こう!正規表現 vol.1 正規表現 is 何

^, $

^「行の先頭」にマッチする

$「行の末尾」にマッチする

Page 38: 書こう!正規表現 vol.1 正規表現 is 何

^, $

^「行の先頭」にマッチする

$「行の末尾」にマッチする

^foofoo, fool, foobar, ...

foo$foo, barfoo, ...

^foo$foo

Page 39: 書こう!正規表現 vol.1 正規表現 is 何

^, $

^$(空行)

^(全行)

$(全行)