Successfully reported this slideshow.
Your SlideShare is downloading. ×

Regex Introduction

Ad

正規表現 入門
●   2009/06/06
●   mollifier
●   http://d.hatena.ne.jp/mollifier/

Ad

正規表現って何 ?

Ad

こんなの



ウェブテコ第 [0-9]+ 回

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 97 Ad
1 of 97 Ad

More Related Content

Regex Introduction

  1. 1. 正規表現 入門 ● 2009/06/06 ● mollifier ● http://d.hatena.ne.jp/mollifier/
  2. 2. 正規表現って何 ?
  3. 3. こんなの ウェブテコ第 [0-9]+ 回
  4. 4. こんなことはありませんか ?
  5. 5. 表記の揺れを考慮して 検索したい 僕は Internet Explorer が大好きです。そ れは、 InternetExplorer が僕にちょうど良 いスピードで動いてくれるからです。 それに、他では学べない IE 独自の技術も勉 強できるからです。
  6. 6. HTML ファイルから <h*> ( 見出し要素 ) の行だけ探したい <h1> トマトとチキンの煮込み </h1> <h2> 材料 </h2> <ul> <li> トマトの水煮 </li> <li> 鶏もも肉 </li> </ul>
  7. 7. こんな時に役に立つのが 正規表現
  8. 8. 正規表現とは ● 文字列のパターンを表現する方法 ● 複雑な条件でも簡潔に表記できる
  9. 9. 正規表現が使用可能なツール ● テキストエディタ – 秀丸 – サクラエディタ – TextMate – vim – emacs など
  10. 10. 正規表現が使用可能なツール ● プログラム言語 – JavaScript – Perl – Ruby – Java – C# など
  11. 11. こんなものにも http://www.google.co.jp/codesearch
  12. 12. テキストを扱うツールなら たいてい使用できる
  13. 13. ということは ……
  14. 14. 一度身につけると いろんな場面で活用できる
  15. 15. ぜひとも使えるようになりたい
  16. 16. というわけで、 正規表現の使い方を 見ていきましょう
  17. 17. 再び さっきの例 ウェブテコ第 [0-9]+ 回
  18. 18. ウェブテコ第 [0-9]+ 回 この [0-9]+ という部分は 正規表現で特別な意味を持つ
  19. 19. このような文字を メタ文字と呼びます
  20. 20. メタ文字の意味を理解するのが 大事
  21. 21. メタ文字一覧 ● {n,m} ● w ● {n,} ● W ● {n} ● s ● ? ● S ● + ● d ● * ● D ● [...] ● t ● [^...] ● n ● . ● r
  22. 22. まだまだあります ● | ● (?=pattern) ● (pattern) ● (?!pattern) ● (?:pattern) ● *? ● ^ ● +? ● $ ● ?? ● b ● {n,m}? ● B ● {n,}? ● {n}?
  23. 23. Never Ending ● A ● (?<name>pattern) ● Z ● (?ipattern) ● z ● *+ ● G ● ++ ● (?#...) ● ?+ ● (?<=pattern) ● {n,m}+ ● (?<!pattern) ● {n,}+ ● (?>pattern) ● {n}+
  24. 24. いっぱいありすぎ
  25. 25. でも、よく使うのはごく一部
  26. 26. よく使うもの その 1 ● . ( ドット ) – 任意の 1 文字 ● [...] – [ ] 内の任意の 1 文字 ● [^...] – [ ] 内に含まれない 任意の 1 文字
  27. 27. . ( ドット ) を使う例 ミッキー . ウス
  28. 28. ミッキー . ウス ● マッチする – ミッキーガウス ● マッチしない – ミッキーママウス
  29. 29. [...] を使う例 今日は [456] 月です
  30. 30. 今日は [456] 月です ● マッチする – 今日は 6 月です ● マッチしない – 今日は 3 月です
  31. 31. [ - ] で範囲の指定 今日は [0-9] 日です
  32. 32. 今日は [0-9] 日です ● マッチする – 今日は 6 日です ● マッチしない – 今日は 10 日です – 今日は祝日です
  33. 33. [^...] を使う例 今日は [^0][0-9] 日です
  34. 34. 今日は [^0][0-9] 日です ● マッチする – 今日は 10 日です ● マッチしない – 今日は 06 日です
  35. 35. これらはすべて 「何か 1 文字」 にマッチする
  36. 36. よく使うもの その 2 ● * – 直前の項目を 0 回以上繰り返す ● + – 直前の項目を 1 回以上繰り返す
  37. 37. * を使う例 url *= ( スペースの後に *)
  38. 38. url *= ● マッチする – url=”http://webteko.jp/”; – url =”http://webteko.jp/”; – url =”http://webteko.jp/”; ● マッチしない – url;
  39. 39. + を使う例 <div +class=”main” ( スペースの後に +)
  40. 40. <div +class=”main” ● マッチする – <div class=”main” – <div class=”main” ● マッチしない – <divclass=”main”
  41. 41. これらはすべて 繰り返し回数を指定する
  42. 42. よく使うもの その 3 ● ^ – 行の先頭 ● $ – 行のの最後
  43. 43. ^ を使う例 ^[0-9]
  44. 44. ^[0-9] ● マッチする – 3.2 文字列 ● マッチしない – Opera 10 ベータ版が リリースされました
  45. 45. $ を使う例 ^[0-9]+$
  46. 46. ^[0-9]+$ ● マッチする –0 – 177 ● マッチしない – 1,000
  47. 47. これらはすべて 位置にマッチする
  48. 48. 位置を固定するところから 「アンカー」とも呼ばれる
  49. 49. ここまでのまとめ
  50. 50. 何か 1 文字にマッチする ● . ( ドット ) ● [...] ● [^...]
  51. 51. 繰り返し回数を指定する ●* ●+
  52. 52. 位置にマッチする ( アンカー ) ●^ ●$
  53. 53. この 7 種類だけでも かなり凝ったことが出来る
  54. 54. 他にも色々メタ文字があるけど 基本は同じ
  55. 55. この 3 種類のどれか ● 何か 1 文字にマッチする ● 繰り返し回数を指定する ● 位置にマッチする
  56. 56. メタ文字一覧とかを見ながら 使ってみてください
  57. 57. ここからが本番
  58. 58. 正規表現処理のしくみ
  59. 59. 正規表現マッチングのメカニズ ムについて、もう少し詳しく見 てみましょう
  60. 60. 例題
  61. 61. パス名からディレクトリ部分を 取り除きたい ● /etc/hosts -> hosts ● /usr/bin/zsh -> zsh
  62. 62. いきなり答え
  63. 63. こんな風に置換すれば OK ● 検索する文字列 ^.*/ ● 置換する文字列 空文字列
  64. 64. /usr/bin/zsh 下線部が ^.*/ にマッチする
  65. 65. ん ? でも
  66. 66. 何通りにも解釈 できるんですけど 1./usr/bin/zsh 2./usr/bin/zsh ^.*/ 3./usr/bin/zsh
  67. 67. 結局どれ ?
  68. 68. マッチング処理を最初から 順番に見てみる
  69. 69. 開始位置が先頭に固定される /usr/bin/zsh ^ . */
  70. 70. 先頭の / が .* にマッチする /usr/bin/zsh ^ .* /
  71. 71. もうちょっと詳しい説明 ● .* の繰り返し回数は 「何回でも良い」
  72. 72. もうちょっと詳しい説明 ● なので、 .* にとっては / を「掴む」か「掴まない」か 2 つ選択肢がある
  73. 73. もうちょっと詳しい説明 ● そういうときは「掴む」方を選ぶ ● つまり長くなる方を選ぶ ● この動作を「欲張り」と呼ぶ
  74. 74. 次の u も .* にマッチする /usr/bin/zsh ^ .* /
  75. 75. どんどんマッチする /usr/bin/zsh ^ .* /
  76. 76. 結局、全部 .* にマッチする /usr/bin/zsh ^ .* /
  77. 77. 最後の / にマッチする 文字がない /usr/bin/zsh ない ^ .* /
  78. 78. じゃあ、マッチ失敗 ?
  79. 79. いやいや、そうじゃない ● .* は「任意の回数」のなので、 最後まで掴まなくても良い
  80. 80. いやいや、そうじゃない ● .* が最後の h を「掴む」ことを 選らんだら、 全体としてマッチに失敗した
  81. 81. いやいや、そうじゃない ● .* が最後の h を「掴む」ことを 選らんだら、 全体としてマッチに失敗した ● .* が h を「掴まない」方を 選んでみる
  82. 82. 1 文字手放す /usr/bin/zsh ^ .* /
  83. 83. これでもマッチ失敗 /usr/bin/zsh ^ .* /
  84. 84. もう 1 文字手放す /usr/bin/zsh ^ .* /
  85. 85. 成功するまで手放す /usr/bin/zsh ^ .* /
  86. 86. やった ! マッチ成功 /usr/bin/zsh ^ .* /
  87. 87. というわけで、全体として 下線部がマッチした /usr/bin/zsh ^ .* /
  88. 88. ここを空文字に置換すると /usr/bin/zsh
  89. 89. ディレクトリ部分がなくなる /usr/bin/zsh zsh
  90. 90. 繰り返し回数の選び方 ● 選択肢が 2 つあったら、 まずは長くなる方を試す ● 全体としてマッチに失敗したら、 選ばれなかった方を試す
  91. 91. 言い方を変えると ● * とか + とか 回数指定は欲張り ● 欲張りすぎて全体として マッチに失敗してしまう場合は 文字を手放す
  92. 92. ここまで分かれば 微妙な問題でも どこにマッチするか分かる
  93. 93. まとめ
  94. 94. まとめ ● 正規表現のメタ文字は いっぱいある ● 基本的なやつが分かってしまえば、 あとは一覧表を見ながら 使えば OK
  95. 95. まとめ ● * や + は欲張り ● 欲張りすぎてマッチに失敗する ときは文字を手放す
  96. 96. ぜひ、正規表現を 使ってみてください
  97. 97. ありがとうございました

×