正規表現入門

3,221 views

Published on

Published in: Technology, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,221
On SlideShare
0
From Embeds
0
Number of Embeds
331
Actions
Shares
0
Downloads
24
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

正規表現入門

  1. 1. 正規表現入門<br />2011/07/02<br />thinca<br />
  2. 2. 正規表現とは?<br />
  3. 3. 例えば<br />携帯電話の番号<br /> 090-1234-5678<br /> 080-2011-0702<br /> etc…<br />3桁の数字-4桁の数字-4桁の数字<br />
  4. 4. 例えば<br />1つの正規表現で表現できる<br />全ての電話番号が検索ができる<br />d{3}-d{4}-d{4}<br />
  5. 5. 柔軟に文字列を探すためのツール<br />
  6. 6. どこで使えるのか<br />テキストエディタ<br />検索<br />置換<br />プログラミング言語<br />組み込み<br />ライブラリ<br />その他テキストのある所<br />
  7. 7. 今日やること<br />正規表現の基本的な概念や機能の解説<br />具体例はあまりないです<br />
  8. 8. 注意点<br />正規表現には多くの実装がある<br />どの機能が使えるかは実装による<br />記法が違うことも<br />必ずマニュアルを確認すること!<br />文字コードやロケールも絡んでくる<br />今回は考慮しません<br />
  9. 9. はじめます<br />
  10. 10. 用語<br />パターン<br />正規表現文字列のこと<br />マッチする<br />パターンが文字列中に見つかること<br />
  11. 11. メタ文字<br />正規表現として特別な意味を持つ文字<br /> + * ? . ^ $ | ( ) { } [ ] など<br />メタ文字自体にマッチさせたい場合は、 でエスケープする<br />(笑)<br />
  12. 12. 文字<br />通常の文字は見た目通りにマッチする<br /> で始まる特殊な記法がある<br />
  13. 13. 文字クラス<br />
  14. 14. 文字クラス<br />文字の集合<br />集合の中のどれか1文字にマッチする<br />
  15. 15. 文字クラスの書き方<br />[] で文字を囲む<br />これらの文字のいずれかにマッチする<br />- で範囲を指定できる<br />[abc]<br />りゅう[こし]<br />[a-zA-Z]<br />
  16. 16. 否定文字クラス<br />指定した文字以外にマッチする<br />[] の先頭に ^ を付ける<br />[^a-zA-Z]<br />
  17. 17. 文字クラス内でのメタ文字<br />文字クラス内ではメタ文字が変わる<br />[ ] - ^ など<br />それ以外の文字は普通に扱われる<br />[+*?.$|(){}]<br />
  18. 18. 定義済み文字クラス<br />
  19. 19. 文字クラスあれこれ<br />POSIX 文字クラスと呼ばれるものもある<br />表記方法はそれぞれ<br />-><br />Unicode のブロックやカテゴリを使える<br />[[:digit:]]<br />p{Digit}<br />d<br />p{InHiragana}<br />p{InKatakana}<br />p{InCJKUnifiedIdeographs}<br />
  20. 20. アンカー<br />文字ではなく位置にマッチする<br />
  21. 21. 量指定子<br />
  22. 22. 量指定子<br />直前の要素の繰り返しを指定する<br />文字<br />文字クラス<br />グループ (後述)<br />
  23. 23. 量指定子の書き方<br />{n} で n 回の繰り返し<br />{m,n} で m 回以上 n 回以下の意味<br />m,nの一方を省略できる<br />ぽ{4}ーん<br />Go{1,10}gle<br />デュラ{3,}<br />
  24. 24. よく使う量指定子<br />よく使われるものは別に定義してある<br />普段はこれらだけで十分<br />
  25. 25. 最短一致<br />通常の量指定子は最長一致<br />↓<br />↓<br /><div id="foo" class="bar"><br />".*"<br /><div id="foo" class="bar"><br />
  26. 26. 最短一致<br />後ろに ? を付けると最短一致に<br />↓<br />↓<br /><div id="foo" class="bar"><br />".*?"<br /><div id="foo" class="bar"><br />
  27. 27. 選択<br />
  28. 28. 選択<br />パターンを複数のパターンに区切る<br />区切ったパターンのうちどれかにマッチすればいい<br />文字クラスのパターン版と考えることもできる<br />
  29. 29. 選択の書き方<br />パターンを | で区切る<br />いくつでも可能<br />マリオ|ルイージ<br />マリオ|ルイージ|ピーチ|クッパ|ヨッシー<br />
  30. 30. グループ<br />
  31. 31. グループ<br />パターンをまとめる<br />グループ単体では意味がない<br />まとめた部分に対して<br />量指定子を使ったり<br />内部で選択を使ったり<br />後方参照(後述)に使ったり<br />
  32. 32. グループの書き方<br />() で囲む<br />入れ子も可能<br />(d+)<br />((.*)d+)<br />
  33. 33. グループの利用方法<br />グループに対して量指定子が指定できる<br />グループ内で選択を使うことで、パターンの一部で選択ができる<br />(ほむ){2,}<br />PlayStation (2|3|Portable|Vita)<br />
  34. 34. 後方参照<br />前方参照とも言う<br />1 ~ 9 でグループを参照<br />グループがマッチした部分と同じ文字列になる<br />(.+)ちゃんマジ1<br />
  35. 35. グループの順番<br />グループの ( が出てきた順に番号が付く<br />1 = abcdefg<br />2 = abcd<br />3 = efg<br />4 = hijk<br />マッチしなかった部分は空文字列になる<br />((abcd)(efg))|(hijk)<br />
  36. 36. 置換<br />後方参照は置換の置き換え後にも使える<br />(.+?),(.+?)<br />2,1<br />
  37. 37. まだまだある<br />後方参照しないグループ<br />(肯定|否定)(先読み|後読み)<br />正規表現オプション<br />強欲な量指定子<br />文字クラスの交差<br />プリプロセス演算 (l u L U)<br />

×