Post on 20-Jul-2015
書こう!正規表現vol.1 正規表現 is 何
このシリーズは
オライリー 「詳説 正規表現」を半ばなぞっていきます
このシリーズは
オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい
このシリーズは
オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい
・復習する
このシリーズは
オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい
・復習する・そこはそうじゃないと突っ込む
このシリーズは
オライリー 「詳説 正規表現」を半ばなぞっていきますので、この本を既に読んでいる人は以下のように楽しんで下さい
・復習する・そこはそうじゃないと突っ込む・当時の甘酸っぱい思い出に浸る
Wikipedia曰く
正規表現(せいきひょうげん、英: regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。
??
正規表現(せいきひょうげん、英: regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。(中略)もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。
???
要するに
スゴイglob(或いはワイルドカード)
./**.txtfoo.00?*example.com
スゴイglob(或いはワイルドカード)
./**.txtfoo.00?*example.com
スゴイglob(或いはワイルドカード)
ここが似ている・(割と)どこでも使える・パターンにマッチさせる
./**.txtfoo.00?*example.com
スゴイglob(或いはワイルドカード)
ここが似ている・(割と)どこでも使える・パターンにマッチさせる
ここが似ていない・もっと複雑なことができる・メタ文字の意味など、マッチングのルール・対象は基本的に一行の文字列
何に使うの?
何に使うの?
一般に、あるパターンの検索や置換に使う
何に使うの?
一般に、あるパターンの検索や置換に使う
例えば・コードの山からIPアドレスっぽいものを全て見つける・<img src=”...”>を全て <a href=”...”><img src=”...”></a> に置換する・空行以外の全行末に「。」を追加する
何に使うの?
一般に、あるパターンの検索や置換に使う
例えば・コードの山からIPアドレスっぽいものを全て見つける・<img src=”...”>を全て <a href=”...”><img src=”...”></a> に置換する・空行以外の全行末に「。」を追加する
複雑で難解な正規表現もあるし、その使い所もあるが、簡単な正規表現でもかなり使える
どこで使えるの?
どこで使えるの?
・多くのプログラミング言語・sed, grepなどのLinuxコマンド・高機能なテキストエディタetc...
どこで使えるの?
・多くのプログラミング言語・sed, grepなどのLinuxコマンド・高機能なテキストエディタetc...
実装に差がある場合もあるが、かなり色々なところで利用可能
メタ文字
メタ文字とは
メタ文字とは
meta: 超
メタ文字とは
meta: 超
つまり、超文字
メタ文字とは
meta: 超
つまり、超文字超すごいとか超余裕とか超兄貴の仲間
メタ文字とは
meta: 超
つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく
メタ文字とは
meta: 超
つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく超音速とか超弩級とか超人とかの仲間
メタ文字とは
meta: 超
つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく超音速とか超弩級とか超人とかの仲間
即ち、文字を超えた文字、文字でありながら文字でないもの表示される文字それ自体を表しているわけでないもの
メタ文字とは
meta: 超
つまり、超文字超すごいとか超余裕とか超兄貴の仲間ではなく超音速とか超弩級とか超人とかの仲間
即ち、文字を超えた文字、文字でありながら文字でないもの表示される文字それ自体を表しているわけでないもの
globでいえば、 メタ文字 * は「*」という文字それ自体ではなく、
「任意の文字」という概念を表している
メタ文字とは
逆に言うと、メタ文字でない文字は全てただの文字(リテラル)である
メタ文字とは
逆に言うと、メタ文字でない文字は全てただの文字(リテラル)である
globでいえば、*.txt の * 以外の文字は文字をそのまま表している
メタ文字とは
逆に言うと、メタ文字でない文字は全てただの文字(リテラル)である
globでいえば、*.txt の * 以外の文字は文字をそのまま表している
いかに意味ありげな記号でも、いかに制御構造っぽいつながりの単語でも、メタ文字でなければそれはリテラルであって、見た目通りの文字を表す意味しか持たない
メタ文字
^, $
^「行の先頭」にマッチする
$「行の末尾」にマッチする
^, $
^「行の先頭」にマッチする
$「行の末尾」にマッチする
^foofoo, fool, foobar, ...
foo$foo, barfoo, ...
^foo$foo
^, $
^$(空行)
^(全行)
$(全行)