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.

正規表現を覚えよう(初級編)

2,048 views

Published on

正規表現の魅力に気づいていない人向け。問題は、魅力に気づいていない人はこのスライドを見ようと思わないと言う事。

Published in: Technology
  • Be the first to comment

正規表現を覚えよう(初級編)

  1. 1. 正規表現を覚えよう(初級編)アークシステム株式会社 鈴⽊ 一生
  2. 2. 正規表現を覚えよう 2正規表現とは⽂字列の集合を一つの⽂字列で表現する方法の一つ(Wikipdiaより)
  3. 3. 正規表現を覚えよう 3なんのこっちゃ?
  4. 4. 正規表現を覚えよう 4正規表現とは「メタ⽂字」と呼ばれる特殊⽂字と⽂字列の組み合わせで複数の⽂字列を表現し、検索やgrepの機能を強⼒にする
  5. 5. 正規表現を覚えよう 5・・まだ、よくわかんね。
  6. 6. 正規表現を覚えよう 6例えば・・・半角スペースやら、タブ⽂字やらが混在している名前リストはっきり言って、イラっとします。
  7. 7. 正規表現を覚えよう 7例えば・・・このリストを「[␣□¥t]+」 → 「¥t」で置換します※␣ :半角スペース、□全角スペース
  8. 8. 正規表現を覚えよう 8例えば・・・ほら、この通り。スッキリしました。
  9. 9. 正規表現を覚えよう 9あいまい検索でよくね?
  10. 10. 正規表現を覚えよう 10正規表現なら・・・もっと複雑な表現ができます。そう、正規表現ならね。例えば・・・america、America、AMERICA、アメリカを一度に検索する
  11. 11. 正規表現を覚えよう 11正規表現なら・・・検索⽂字列:[Aa](merica|MERICA)|アメリカほらね。
  12. 12. 正規表現を覚えよう 12別々に検索すればいいじゃん。
  13. 13. 正規表現を覚えよう 13じゃぁ、これは?さっきのから、アメリカン、Americanを除いて検索。
  14. 14. 正規表現を覚えよう 14除いて検索?できんの?
  15. 15. 正規表現を覚えよう 15正規表現なら・・・検索⽂字列:[Aa](merica|MERICA)(?![Nn])|アメリカ(?!ン)どうです?すごさがわかってきましたか?でも、これはまだまだ序の口です。
  16. 16. 正規表現を覚えよう 16正規表現は正規表現⾃体は、⽂字列を表現する⼿法に過ぎませんが、その利⽤法はかなり広いです。私は主に、⽂字列検索置換による機械的な⽂字列加⼯データ解析や加⼯プログラムの⼊⼒チェックの実装などに使⽤しています。
  17. 17. 正規表現を覚えよう 17検索や加⼯はわかるが、解析やら⼊⼒チェックって?
  18. 18. 正規表現を覚えよう 18正規表現なら・・・ある特定の⽂字列が含まれているか、いないかを元にそのデータが正当かどうかをチェックする事ができます。例えば・・郵便番号の⼊⼒チェックとして、以下のような要件があるとします。3桁-4桁の数字で構成される区切り⽂字は「-」のみ
  19. 19. 正規表現を覚えよう 19正規表現で⼊⼒チェックテストデータはこんな感じこれを正規表現でチェックするには・・・
  20. 20. 正規表現を覚えよう 20正規表現で⼊⼒チェック検索⽂字列:^¥d{3}-¥d{4}$この正規表現にマッチするか否かで、⼊⼒チェックやデータのチェックを⾏う事ができます。
  21. 21. 正規表現を覚えよう 21正規表現で⼊⼒チェック通常のプログラムだと、100stepくらいの実装が正規表現を使えば1stepで可能だったりします。(ただし、正規表現を知らない人にはメンテできなくなりますが・・)他にもデータ加⼯なんかは、⾺⿅正直にやると2時間くらいかかる単純作業が1分でできてしまったりもします。
  22. 22. 正規表現を覚えよう 22覚えたくなってきたでしょ?正規表現は、非常に便利なんですが、表現⾃体が暗号のようで分かりにくいのと、有効性の説明が難しいため、日本ではあまり浸透していません。逆に言うと、これを知っていると非常に強⼒な武器になります。また一度覚えると、⼿放せなくなるほど便利です。是非、覚えましょう。
  23. 23. 正規表現を覚えよう 23簡単なメタ⽂字では最初に「メタ⽂字」から。メタ⽂字は「特殊な意味を持つ⽂字」と言う意味です。有名なものに¥n 改⾏¥t タブ⽂字が、あります。中には、これを知っているだけで「正規表現を知っている」と言う輩がおりますが、そう言う人を⾒かけたら、⿐で笑ってあげてください。
  24. 24. 正規表現を覚えよう 24「¥n」改⾏例)検索⽂字列:です¥n「です」で終わる⾏を検索します。厳密には「〜ですの後ろに改⾏がある」場所を検索します。
  25. 25. 正規表現を覚えよう 25検索結果「です」が⾏末でない場合、ヒットしなくなります。
  26. 26. 正規表現を覚えよう 26「¥t」タブ⽂字例)検索⽂字列:¥t「タブ⽂字」を検索します。
  27. 27. 正規表現を覚えよう 27代表的なメタ⽂字次に、代表的なメタ⽂字です。^ ⾏頭$ ⾏末. 何でもいいから1⽂字+ 直前の⽂字を1個以上繰り返す* 直前の⽂字を0個以上繰り返す? 直前の⽂字がある、またはない(ものぐさ検索)¥ エスケープシーケンス{n,m} 繰り返し回数指定だんだん、暗号っぽくなってきましたが、ひとつずつ、解説していきましょう。
  28. 28. 正規表現を覚えよう 28「^」⾏頭例)検索⽂字列:^私は「私は」で始まる⾏を検索します。
  29. 29. 正規表現を覚えよう 29検索結果「私は」が⾏頭にない場合、ヒットしなくなります。「^」⾃体は⽂字を現すのではなく、場所を表す事になります。
  30. 30. 正規表現を覚えよう 30「$」⾏末例)検索⽂字列:です$「です」で終わる⾏を検索します。
  31. 31. 正規表現を覚えよう 31検索結果「〜です」が⾏末でない場合、ヒットしなくなります。「¥n」との違いは「改⾏⽂字を含むか含まないか」です。
  32. 32. 正規表現を覚えよう 32便利な使い方 その1あるファイルの空⾏を削除したい。無駄な空⾏がジャマなので、削除したいと思ったとき、あなたならどうしますか?
  33. 33. 正規表現を覚えよう 33便利な使い方 その1検索⽂字列:^¥n 置換⽂字列:で、置換すると・・・ほら、この通り。何⾏あっても一瞬です。この時、「^¥n」でなく「^$」で置換すると、改⾏⽂字が消えないため、空⾏はなくなりません。
  34. 34. 正規表現を覚えよう 34「.」とにかく、何でもいいから1⽂字例)検索⽂字列:私は.です「私は○です」と言う⽂字列を検索します。
  35. 35. 正規表現を覚えよう 35検索結果「アレ」「ママ」「パパ」は1⽂字でないのでヒットしません。「アレ」も含めるのであれば、次のメタ⽂字を使います。
  36. 36. 正規表現を覚えよう 36「+」直前の⽂字を1個以上繰り返す例)検索⽂字列:私は.+です「私は〜です」と言う⽂字列を検索します。
  37. 37. 正規表現を覚えよう 37検索結果検索⽂字を「私はマ+です」とすると、「私はママです」がヒットします。これは「+」の直前にある「マ」を繰り返してることになります。「私はです」は「私は」と「です」の間に1⽂字もないのでヒットしません。「私はです」も含めるには、次のメタ⽂字を使います。
  38. 38. 正規表現を覚えよう 38「*」直前の⽂字を0個以上繰り返す例)検索⽂字列:私は.*です「私は〜です」と言う⽂字列を検索します。
  39. 39. 正規表現を覚えよう 39検索結果「私はです」もヒットしました。逆に1⽂字、または0⽂字だけをヒットしたい場合は・・・
  40. 40. 正規表現を覚えよう 40「?」直前の⽂字がある、またはない例)検索⽂字列:私は.?です「私は○です」、「私はです」を検索します。
  41. 41. 正規表現を覚えよう 41検索結果「私はです」もヒットしました。ただ正直、「?」はあんまり使いません。(たいてい、「*」で事足りる)
  42. 42. 正規表現を覚えよう 42「¥」エスケープシーケンス例)検索⽂字列:0¥..+メタ⽂字を実際に検索したい場合、「¥」でエスケープします。上記の例では、0で始まり、⼩数点を含む⽂字列を検索します。
  43. 43. 正規表現を覚えよう 43検索結果0で始まり、⼩数点を含む⾏が検索されました。
  44. 44. 正規表現を覚えよう 44便利な使い方 その2あるフォルダのファイルの一覧を作りたい。こんなフォルダがあったとします。このファイル一覧を作る場合、あなたらならどうしますか?
  45. 45. 正規表現を覚えよう 45便利な使い方 その2検索⽂字列:.*で、「ファイル名一覧だけ作成」にチェックを⼊れてgrepすると・・・ほら、この通り・・・あれ?ゴミ(⾏番号)がジャマですね。
  46. 46. 正規表現を覚えよう 46便利な使い方 その2じゃ、ジャマな部分は消してしまいましょう。検索⽂字列:¥(.+¥) 置換⽂字列:で、置換すれば・・・ほら、ファイルの一覧ができました。サブフォルダがあっても簡単にできますよ!
  47. 47. 正規表現を覚えよう 47繰り返しの注意点繰り返しはそのパターンが1⾏の中で複数ヒットする場合、その最⼤⻑の⽂字列にヒットします。これをたまに忘れて、痛い目に合います。
  48. 48. 正規表現を覚えよう 48どういう意味?
  49. 49. 正規表現を覚えよう 49繰り返しの注意点例えば・・・検索⽂字列:私は.+ですで、以下のファイルを検索すると・・・
  50. 50. 正規表現を覚えよう 50繰り返しの注意点こうなります。この⾏の場合、「.+」は「男」と、「男ですが、彼⼥も男」の2通りの解釈があります。この場合、正規表現では解釈できるパターンの内、最も⻑い⽂字列にヒットします。
  51. 51. 正規表現を覚えよう 51意味は分かるけど、注意って?
  52. 52. 正規表現を覚えよう 52よくやる失敗こんなCSVファイルがあります。この中のデータを初期化しようとして、次の様に置換すると・・・
  53. 53. 正規表現を覚えよう 53よくやる失敗検索⽂字列:".+" 置換⽂字列:""こうなってしまいます。では、こう言う時はどうするか?
  54. 54. 正規表現を覚えよう 54「?」ものぐさ検索繰り返しを表すメタ⽂字の直後に「?」をつけると、最も短い⽂字列にヒットします。検索⽂字列:".+? " 置換⽂字列:""これで、CSVファイルを初期化できました。
  55. 55. 正規表現を覚えよう 55{n,m} 繰り返し回数指定以下のようなファイルがあります。この中で、「o」が2〜4個の⽂字列を探したいとします。さて、どうしますか?
  56. 56. 正規表現を覚えよう 56{n,m}繰り返し回数指定いくつか方法はあるんですが、最もシンプルなのはこう。検索⽂字列:go{2,4}gleなんとなく、分かりますよね?{n,m}で、n個以上、m個以下の繰り返しを意味します。
  57. 57. 正規表現を覚えよう 57{n,m}繰り返し回数指定n,mはそれぞれ省略する事ができます。{n} :n個の繰り返し{,m}:m個以下の繰り返し{n,} :n個以上の繰り返し検索⽂字列:go{3,}gle
  58. 58. 正規表現を覚えよう 58最後にこれで、初級編は終わりです。これだけでも、だいぶ便利さが伝わったのではないでしょうか?ただ、正規表現を使いこなすにはもう少し踏み込んだ勉強が必要です。興味があれば、中級編に進んでみましょう。

×