Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
正規表現 超⼊⾨
(Regular Expression)
WSL 勉強会
2016/12/10
友松祐太
2016/12/10 1
はじめに
• 本スライドは本・ネットの資料を参考に作成した資料です。資
料内に誤りがあるかもしれません。。(指摘をお願いします。)
• また、スライド内で出す例はあくまで⼀例に過ぎず、別の書き
⽅であったり、よりスマートな書き⽅などあるかもしれ...
もくじ
• 正規表現とは
• マッチング
• 1⽂字マッチング
• 繰り返しマッチング
• ⽂末・⽂頭マッチング
• その他の正規表現
• 正規表現による置換
2016/12/10 3
正規表現とは
• ⽂字列のパターンマッチングをするときの表現⽅法
• 正規表現を⽤いることによってあらゆる⽂字列のパターンマッ
チングを⾏うことが出来る。
/^[a-zA-Z0-9.!#$%&ʼ*+/=?^_`{|}~-]+@[a-zA-Z0-...
正規表現とは
• ⽂字列のパターンマッチングをするときの表現⽅法
• 正規表現を⽤いることによってあらゆる⽂字列のパターンマッ
チングを⾏うことが出来る。
/^[a-zA-Z0-9.!#$%&ʼ*+/=?^_`{|}~-]+@[a-zA-Z0-...
正規表現とは
• では、どんなときに使う?
• パターンにマッチしたファイル名のファイルを探す(hoge| grep huga)
• フォームに⼊⼒された⽂字列が指定通りになっているかチェック
• ⽂字列置換
• …
ここで紹介しきれないくらい...
正規表現とは
• 正規表現は⾔語などの環境によって若⼲⽅⾔が存在します。(ほ
とんどの⽂法は同じ)
• 今回はAtomで使える⽂法でご紹介します
• AtomをインストールしてCmd+Fで
検索画⾯を出して→のような設定にし
てください
201...
1⽂字マッチング
2016/12/10 8
1⽂字マッチング -特定の1⽂字-
• aとマッチングさせたい
• a
• 単純にaとすれば”a”とマッチング出来る。
• 1とマッチングさせたい
• 1
特定の1⽂字とマッチさせたいときはその⽂字を直接指定すれば
よい。
2016/12/10...
1⽂字マッチング -数字1⽂字-
• 半⾓数字0,1,2,3,4,5,6,7,8,9のどれか1⽂字とマッチさせたい
• d
• あるいは[0-9]…後程解説
• 数字以外の1⽂字とマッチさせたい
• D
• あるいは[^0-9]…後程解説
20...
1⽂字マッチング -英数字-
• 英数字{a, b, …, z, A, B, …, Z, 0, 1, …, 9,_}1⽂字とのマッチング
• w
• あるいは[a-zA-Z0-9_]
• 英数字以外の1⽂字とのマッチング
• W
• あるいは[...
1⽂字マッチング -空⽩⽂字-
• 空⽩⽂字(半⾓・全⾓スペース、改⾏、タブ等)とマッチング
• s
• あるいは[fnrtv]
• 空⽩⽂字以外とマッチング
• S
• あるいは[^fnrtv]
2016/12/10 12
特殊⽂字
• 改⾏
• n
• タブ区切り
• t
• 正規表現のメタキャラクター
• 先頭にをつける(エスケープする)
• メタキャラクター⼀覧
• . * + ? ( ) [ ] ^ $ 
2016/12/10 13
1⽂字マッチング
-候補マッチング-
• 候補の中から1⽂字にマッチング
• []の中にマッチさせたい1⽂字の候補を羅列する
例) [abc]
aかbかcにマッチングする
例) [012]
0か1か2にマッチングする
• 候補以外の1⽂字にマッ...
1⽂字マッチング
-候補マッチング(範囲指定)-
• 候補の中の1⽂字にマッチング【応⽤編】
• [a-z] のように指定すると a~z のどれか1⽂字にマッチさせられる。
例)[^a-zA-Z0-9_]
英数字アンスコ以外の1⽂字にマッチング...
1⽂字マッチング -任意の1⽂字-
• なんでもいいので1⽂字とマッチさせたい
• .(ピリオド)
例)A.Cでマッチング
ABC, AAC, AaC, A1C, …などにマッチする
2016/12/10 16
1⽂字マッチング
構⽂ マッチする⽂字
a “a”とマッチ
d 数字1⽂字とマッチ
D 数字以外の1⽂字とマッチ
s 空⽩⽂字1⽂字とマッチ
S 空⽩⽂字以外の1⽂字とマッチ
w 英数字アンスコ1⽂字とマッチ[a-zA-Z0-9_]
W 英数字...
繰り返しマッチング
2016/12/10 18
繰り返しマッチング
• 直前のパターンの1回以上の繰り返し
• “+”(プラス記号)
例1) GRe+N
GReN, GReeN, GReeeN, GReeeeN, GReeeeeN,…
にマッチする
例2)d+
0,1,2,11,12,000...
繰り返しマッチング
• 直前のパターンの0回以上の繰り返し
• *(アスタリスク)
例)GRe*N
GRN, GReN, GReeN, GReeeN, GReeeeN, GReeeeeN,…にマッチ
↑*だとこのパターンが存在
2016/12/...
繰り返しマッチング
• 直前のパターンの0回か1回の繰り返し
• ?
例)apples?
appleとapplesにマッチする
look(ed)?
lookとlookedにマッチする
2016/12/10 21
繰り返しマッチング
• 直前のパターンの任意の回数の繰り返し
• {n} …n回の繰り返し
• {n,m} …n回以上,m回以下の繰り返し
• {0,1}は?と同値
• {n,} …n回以上の繰り返し
• {0,}は*と同値、{1,}は+と同値...
繰り返しマッチング
正規表現
* 直前のパターンの0回以上の繰り返し
+ 直前のパターンの1回以上の繰り返し
? 直前のパターンの0回または1回
{n} 直前のパターンのn回の繰り返し
{n,m} 直前のパターンのn回以上m回以下の繰り返し
{...
⽂末・⽂頭マッチング
2016/12/10 24
⽂頭記号/⽂末記号
• ⽂頭は^で表す。
• 正規表現の先頭に^を指定する。
• ⽂末表現は$で表す。
• 正規表現の末尾に$を指定する。
例)Thisで始まって.(ピリオド)で終わる⾏とのマッチ
^This.*.$
2016/12/10 25
その他の正規表現
2016/12/10 26
ORマッチ
• 2つの⽂字列のどちらかにマッチさせたい。
• |(パイプ)で結ぶ
例)Windows|WINDOWS
WindowsあるいはWINDOWSにマッチ
例)Windows|WINDOWS|windows
Windows,WINDOW...
ブロック
• ()でくくるとブロック化出来ます。
例 (ab)+
ab,abab,ababab,…にマッチする。
例 W(indows|INDOWS)
Windows,WINDOWSにマッチ
例 GRee(ee)?N
GReeN,GReeeeN...
正規表現による置換
2016/12/10 29
正規表現による置換
• 正規表現による置換を使うことで「ちょっとしたデータ整形を
したい」や「この部分取ってきたい」みたいな作業をやるには
かなり有効である。
• いろいろな例で説明します!
2016/12/10 30
正規表現による置換
• ()で括ると()内のマッチした部分を記憶する(取り出す)ことがで
きる。
例) www.example.com/layer_1/layer_2/ex.html
ここからドメインだけを取得したい
^([^/]+)/.*$ ...
正規表現による置換
• 空⾏を消したい
• ^n ---replace--> (空⽂字列)
• ⽂末のカンマを消したい
• ,$ ---replace--> (空⽂字列)
• TSV,CSVの各要素を””で囲いたい
• ([^t]+) ---r...
正規表現による置換
• 情報科学科の学籍番号をmeijiメールのアドレスに変換
d{3}Rd(d{5}) ---replace--> ee$1@meiji.ac.jp
例えば…
157R127112 --replace--> ee27112@m...
正規表現による置換
• htmlからタグだけを取り出す
• (<[^>]*>) ---replace--> n$1n
• ^(n|[^<])* ---replace--> 空⽂字列
2016/12/10 34
CSV・TSVのカラム取り出し
• CSVのk列⽬のカラムを取り出したい。
^([^,n]+,){k-1}([^,n]+)[^n]*$ ---replace--> $2
• TSVのk列⽬のカラムを取り出したい。
^([^tn]+t){k-1}...
Thank you for your attention!
2016/12/10 36
参考
• (メールアドレスを表す現実的な正規表現)
[http://qiita.com/sakuro/items/1eaa307609ceaaf51123]
• (サルにもわかる正規表現⼊⾨)
[http://www.mnet.ne.jp/~n...
Upcoming SlideShare
Loading in …5
×

Regular Expression

229 views

Published on

2016/12/10のWSLの勉強会の資料。
正規表現の入門

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Regular Expression

  1. 1. 正規表現 超⼊⾨ (Regular Expression) WSL 勉強会 2016/12/10 友松祐太 2016/12/10 1
  2. 2. はじめに • 本スライドは本・ネットの資料を参考に作成した資料です。資 料内に誤りがあるかもしれません。。(指摘をお願いします。) • また、スライド内で出す例はあくまで⼀例に過ぎず、別の書き ⽅であったり、よりスマートな書き⽅などあるかもしれません のでご了承お願いします。 • このスライドではごく初歩的な正規表現について紹介します。 これを機に正規表現の便利さを少しでも実感してもらって、 ⾊々正規表現を触ってもらえるとうれしいです 2016/12/10 2
  3. 3. もくじ • 正規表現とは • マッチング • 1⽂字マッチング • 繰り返しマッチング • ⽂末・⽂頭マッチング • その他の正規表現 • 正規表現による置換 2016/12/10 3
  4. 4. 正規表現とは • ⽂字列のパターンマッチングをするときの表現⽅法 • 正規表現を⽤いることによってあらゆる⽂字列のパターンマッ チングを⾏うことが出来る。 /^[a-zA-Z0-9.!#$%&ʼ*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/ 2016/12/10 4 もはや暗号。。
  5. 5. 正規表現とは • ⽂字列のパターンマッチングをするときの表現⽅法 • 正規表現を⽤いることによってあらゆる⽂字列のパターンマッ チングを⾏うことが出来る。 /^[a-zA-Z0-9.!#$%&ʼ*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/ 2016/12/10 5 ある程度この正規表現が読めるようになります!
  6. 6. 正規表現とは • では、どんなときに使う? • パターンにマッチしたファイル名のファイルを探す(hoge| grep huga) • フォームに⼊⼒された⽂字列が指定通りになっているかチェック • ⽂字列置換 • … ここで紹介しきれないくらいさまざまな利⽤シーンがあります 2016/12/10 6
  7. 7. 正規表現とは • 正規表現は⾔語などの環境によって若⼲⽅⾔が存在します。(ほ とんどの⽂法は同じ) • 今回はAtomで使える⽂法でご紹介します • AtomをインストールしてCmd+Fで 検索画⾯を出して→のような設定にし てください 2016/12/10 7 正規表現 の利⽤ ⼤⽂字と⼩ ⽂字の区別 をする
  8. 8. 1⽂字マッチング 2016/12/10 8
  9. 9. 1⽂字マッチング -特定の1⽂字- • aとマッチングさせたい • a • 単純にaとすれば”a”とマッチング出来る。 • 1とマッチングさせたい • 1 特定の1⽂字とマッチさせたいときはその⽂字を直接指定すれば よい。 2016/12/10 9
  10. 10. 1⽂字マッチング -数字1⽂字- • 半⾓数字0,1,2,3,4,5,6,7,8,9のどれか1⽂字とマッチさせたい • d • あるいは[0-9]…後程解説 • 数字以外の1⽂字とマッチさせたい • D • あるいは[^0-9]…後程解説 2016/12/10 10
  11. 11. 1⽂字マッチング -英数字- • 英数字{a, b, …, z, A, B, …, Z, 0, 1, …, 9,_}1⽂字とのマッチング • w • あるいは[a-zA-Z0-9_] • 英数字以外の1⽂字とのマッチング • W • あるいは[^a-zA-Z0-9_] 2016/12/10 11
  12. 12. 1⽂字マッチング -空⽩⽂字- • 空⽩⽂字(半⾓・全⾓スペース、改⾏、タブ等)とマッチング • s • あるいは[fnrtv] • 空⽩⽂字以外とマッチング • S • あるいは[^fnrtv] 2016/12/10 12
  13. 13. 特殊⽂字 • 改⾏ • n • タブ区切り • t • 正規表現のメタキャラクター • 先頭にをつける(エスケープする) • メタキャラクター⼀覧 • . * + ? ( ) [ ] ^ $ 2016/12/10 13
  14. 14. 1⽂字マッチング -候補マッチング- • 候補の中から1⽂字にマッチング • []の中にマッチさせたい1⽂字の候補を羅列する 例) [abc] aかbかcにマッチングする 例) [012] 0か1か2にマッチングする • 候補以外の1⽂字にマッチング • [^]の中にマッチさせたい1⽂字の候補を羅列 例) [^abc] a,b,c以外の1⽂字にマッチ 2016/12/10 14
  15. 15. 1⽂字マッチング -候補マッチング(範囲指定)- • 候補の中の1⽂字にマッチング【応⽤編】 • [a-z] のように指定すると a~z のどれか1⽂字にマッチさせられる。 例)[^a-zA-Z0-9_] 英数字アンスコ以外の1⽂字にマッチング(=W) 2016/12/10 15
  16. 16. 1⽂字マッチング -任意の1⽂字- • なんでもいいので1⽂字とマッチさせたい • .(ピリオド) 例)A.Cでマッチング ABC, AAC, AaC, A1C, …などにマッチする 2016/12/10 16
  17. 17. 1⽂字マッチング 構⽂ マッチする⽂字 a “a”とマッチ d 数字1⽂字とマッチ D 数字以外の1⽂字とマッチ s 空⽩⽂字1⽂字とマッチ S 空⽩⽂字以外の1⽂字とマッチ w 英数字アンスコ1⽂字とマッチ[a-zA-Z0-9_] W 英数字アンスコ以外の1⽂字とマッチ . 任意の1⽂字とマッチ […] []の中に羅列した中の1⽂字にマッチ [^… ] [^]の中に羅列した⽂字以外にマッチ [a-z] aからzの中のどれか1⽂字にマッチ 2016/12/10 17
  18. 18. 繰り返しマッチング 2016/12/10 18
  19. 19. 繰り返しマッチング • 直前のパターンの1回以上の繰り返し • “+”(プラス記号) 例1) GRe+N GReN, GReeN, GReeeN, GReeeeN, GReeeeeN,… にマッチする 例2)d+ 0,1,2,11,12,00000,999231231,23454,… 数字の連続にマッチする。 2016/12/10 19
  20. 20. 繰り返しマッチング • 直前のパターンの0回以上の繰り返し • *(アスタリスク) 例)GRe*N GRN, GReN, GReeN, GReeeN, GReeeeN, GReeeeeN,…にマッチ ↑*だとこのパターンが存在 2016/12/10 20
  21. 21. 繰り返しマッチング • 直前のパターンの0回か1回の繰り返し • ? 例)apples? appleとapplesにマッチする look(ed)? lookとlookedにマッチする 2016/12/10 21
  22. 22. 繰り返しマッチング • 直前のパターンの任意の回数の繰り返し • {n} …n回の繰り返し • {n,m} …n回以上,m回以下の繰り返し • {0,1}は?と同値 • {n,} …n回以上の繰り返し • {0,}は*と同値、{1,}は+と同値 例) GRe{4}N … GReeeeNにマッチ GRe{4,}N … GReeeeN, GReeeeeN, GReeeeeeN,…にマッチ 2016/12/10 22
  23. 23. 繰り返しマッチング 正規表現 * 直前のパターンの0回以上の繰り返し + 直前のパターンの1回以上の繰り返し ? 直前のパターンの0回または1回 {n} 直前のパターンのn回の繰り返し {n,m} 直前のパターンのn回以上m回以下の繰り返し {n,} 直前のパターンのn回以上の繰り返し 2016/12/10 23
  24. 24. ⽂末・⽂頭マッチング 2016/12/10 24
  25. 25. ⽂頭記号/⽂末記号 • ⽂頭は^で表す。 • 正規表現の先頭に^を指定する。 • ⽂末表現は$で表す。 • 正規表現の末尾に$を指定する。 例)Thisで始まって.(ピリオド)で終わる⾏とのマッチ ^This.*.$ 2016/12/10 25
  26. 26. その他の正規表現 2016/12/10 26
  27. 27. ORマッチ • 2つの⽂字列のどちらかにマッチさせたい。 • |(パイプ)で結ぶ 例)Windows|WINDOWS WindowsあるいはWINDOWSにマッチ 例)Windows|WINDOWS|windows Windows,WINDOWS,windowsにマッチ 2016/12/10 27
  28. 28. ブロック • ()でくくるとブロック化出来ます。 例 (ab)+ ab,abab,ababab,…にマッチする。 例 W(indows|INDOWS) Windows,WINDOWSにマッチ 例 GRee(ee)?N GReeN,GReeeeNにマッチ 2016/12/10 28
  29. 29. 正規表現による置換 2016/12/10 29
  30. 30. 正規表現による置換 • 正規表現による置換を使うことで「ちょっとしたデータ整形を したい」や「この部分取ってきたい」みたいな作業をやるには かなり有効である。 • いろいろな例で説明します! 2016/12/10 30
  31. 31. 正規表現による置換 • ()で括ると()内のマッチした部分を記憶する(取り出す)ことがで きる。 例) www.example.com/layer_1/layer_2/ex.html ここからドメインだけを取得したい ^([^/]+)/.*$ ---replace--> $1 結果:www.example.com 2016/12/10 31 カッコで括った部分 にマッチした部分を $で取得することが できる
  32. 32. 正規表現による置換 • 空⾏を消したい • ^n ---replace--> (空⽂字列) • ⽂末のカンマを消したい • ,$ ---replace--> (空⽂字列) • TSV,CSVの各要素を””で囲いたい • ([^t]+) ---replace--> ”$1” • ([^,]+) ---replace--> ”$1” 2016/12/10 32
  33. 33. 正規表現による置換 • 情報科学科の学籍番号をmeijiメールのアドレスに変換 d{3}Rd(d{5}) ---replace--> ee$1@meiji.ac.jp 例えば… 157R127112 --replace--> ee27112@meiji.ac.jp • 学籍番号を何年度卒業の何番に変換 d{3}Rd(d{2})(d{3}) ---replace--> 平成$1年度卒業$2番 例えば… 157R127112 ---replace--> 平成27年度⼊学112番 2016/12/10 33
  34. 34. 正規表現による置換 • htmlからタグだけを取り出す • (<[^>]*>) ---replace--> n$1n • ^(n|[^<])* ---replace--> 空⽂字列 2016/12/10 34
  35. 35. CSV・TSVのカラム取り出し • CSVのk列⽬のカラムを取り出したい。 ^([^,n]+,){k-1}([^,n]+)[^n]*$ ---replace--> $2 • TSVのk列⽬のカラムを取り出したい。 ^([^tn]+t){k-1}([^tn]+)[^n]*$ ---replace--> $2 2016/12/10 35
  36. 36. Thank you for your attention! 2016/12/10 36
  37. 37. 参考 • (メールアドレスを表す現実的な正規表現) [http://qiita.com/sakuro/items/1eaa307609ceaaf51123] • (サルにもわかる正規表現⼊⾨) [http://www.mnet.ne.jp/~nakama/] • (正規表現サンプル集 - メガソフト トップ) [http://www.megasoft.co.jp/mifes/seiki/] • (正規表現 Wikipedia) [https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8% A1%A8%E7%8F%BE] 2016/12/10 37

×