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.

正規表現

1,844 views

Published on

『jus共催、第3回今度はたぶん初心者向けに嘘はないでしょう午前のシェル勉強会/第21回未経験者大歓迎!誰でも働けるアットホームな職場ですシェル芸勉強会』の資料です。

スライド8ページ目 `tr' は `expr' のミスですので読み替えをお願いします。

Published in: Engineering
  • Be the first to comment

正規表現

  1. 1. 正規表現正規表現 USP 友の会 今泉光之 @bsdhack http://bsdhack.org
  2. 2. 正規表現 2 講師講師 ● 今泉光之  UNIX/Linux環境でのプログラミングを中心に、ネットワークや インフラなども含め20年以上に渡る経験だけは積んできました。  当初はC言語でコンパイラ、Xサーバ、ドライバ、TCP/IPによる 通信などシステム系のプログラミングが主でしたが、最近はPerl やPHPなどのWeb向けのLLも使っています。
  3. 3. 正規表現 3 正規表現とは正規表現とは ● いくつかの文字列を一つの文字列で表現する方法 – ケン・トンプソンがエディタの検索用途に ed に実装し たのが unix では最初だと言われている – 英語では Regular Expression と表現する – というか Regular Expression の和訳が正規表現 – 頻繁に RE と表記される ● POSIX 1003.2 にて規定されている
  4. 4. 正規表現 4 grepgrep ● 正規表現との一番の接点 – ex コマンドの文字列検索コマンドが独立 – G(global) RE (Regular Expression) P (Print) – すでに動詞として通用するがそんな単語はない
  5. 5. 正規表現 5 何が便利なのか(その1)何が便利なのか(その1) ● HTML から H タグを見つけたい – H1 から H6 まである – 大文字でも小文字でも良い ● H1/h1/H2/h2/H3/h3/H4/h4/H5/h5/H6/h6 – そこで正規表現です – '<[Hh][1-6]>'
  6. 6. 正規表現 6 何が便利なのか(その何が便利なのか(その 22 )) ● ログファイルから IP アドレスを見つけたい – 1.0.0.1 から 255.255.255.254 まで – 4294967296 通り – そこで正規表現です – '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' – 正確には IP アドレスではないものもマッチする
  7. 7. 正規表現 7 リテラルとメタキャラクタリテラルとメタキャラクタ ● 正規表現はリテラルとメタキャラクタから構成される – リテラル ● 機能や特別な意味を持たず書かれた文字そのまま – abc 、 <h1> など – メタキャラクタ ● 特別な意味をもつ文字 – * 、 ? など
  8. 8. 正規表現 8 正規表現の種類正規表現の種類 ● 基本正規表現 (Basic Regular Expression) – sed 、 grep 、 tr などで利用可 ● unix の初期から利用されている正規表現 ● 拡張正規表現 (Extended Regular Expression) – awk 、 egrep (grep -E) などで利用可 ● よりモダンな実装で機能が拡張されている ● その他 – perl 、 php 、 ruby などの言語で独自拡張されている
  9. 9. 正規表現 9 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 11 ● . – 任意の 1 文字にマッチ ● 改行にマッチするかは実装依存 – POSIX 1003.2 では改行にマッチ ● * – 直前の正規表現の可能な限り大きい繰返しにマッチ ● 繰り返しは 0 回も含まれる
  10. 10. 正規表現 10 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 22 ● ^ – 文字列の先頭にマッチ ● 処理系によっては文字列中の改行の直後(行の先頭)にも マッチ ● $ – 文字列の末尾にマッチ ● 処理系によっては文字列中の改行の直前(行の末尾)にも マッチ
  11. 11. 正規表現 11 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 33 ● [ ] – 中に置かれた文字のいずれかにマッチ – 以下の文字がメタキャラクタとして扱われる ● ^ [ の直後だと否定 ● - 文字と文字の間だと範囲指定 ● ] [ の直後だとリテラルとして扱われる ● [ ] の直前だとリテラルとして扱われる
  12. 12. 正規表現 12 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 44 ● {n} – 直前の正規表現の n 回の繰返しにマッチ ● {n,} – 直前の正規表現の n 回以上の繰り返しにマッチ ● {n,m} – 直前の正規表現の n 回以上 m 回以下の繰り返しにマッチ ● 繰り返しの数は処理系に依存するが最低 256 は指定可能
  13. 13. 正規表現 13 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 55 ● ( ) – 部分文字列をひとまとめとして扱う – 後方参照を行うための指定 ● n – n は 1 から 9 までの整数 – 先行して現れた ( ) で囲まれた正規表現に実際にマッ チしている文字列
  14. 14. 正規表現 14 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 66 ● POSIX クラス – [ ] による範囲指定の時に名前による指定が可能 ● ロケールに影響される可能性がある ● 文字による範囲指定と異なる場合がある – 使う場合は [[:alpha:]] の様に利用する
  15. 15. 正規表現 15 基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 77 ● :alnum: アルファベットと10進数字 ● :alpha: アルファベット ● :blank: 空白文字(タブ、スペース) ● :cntrl: 制御文字 ● :digit: 10進数字 ● :graph: 印字可能で表示可能な文字 ● :lower: アルファベット小文字 ● :print: 印字可能文字 ● :punct: 句読点 ● :space: 空白文字(タブ、スペース、改ページ) ● :upper: アルファベット大文字 ● :xdigit: 16進数字
  16. 16. 正規表現 16 拡張正規表現のメタキャラクタ拡張正規表現のメタキャラクタ 11 ● + – 直前の正規表現の 1 回以上の繰返しにマッチ – 基本正規表現の {1,} と同等 ● ? – 直前の正規表現の 0 回か 1 回の繰返しにマッチ – 基本正規表現の {0,1} と同等
  17. 17. 正規表現 17 拡張正規表現のメタキャラクタ拡張正規表現のメタキャラクタ 22 ● | – 演算子の左右に置かれた正規表現のいずれかにマッチ – 基本正規表現では代替できない ● ( ) { } – 基本正規表現で必要だった が不要となった ● n – 後方参照が除外されたので使えなくなった
  18. 18. 正規表現 18 globglob との相違との相違 ● シェルの glob とは異なる – shell で利用する * や ? とは挙動が異なる ● * あらゆる文字列(空白を含む)にマッチ (正規表現だと .* に近い) ● ? 1 文字にマッチ (正規表現だと . に近い)
  19. 19. 正規表現 19 色々な正規表現色々な正規表現 11 ● usp – 文字列 usp にマッチ ● [Uu][Ss][Pp] – 大文字小文字を区別しないで usp にマッチ ● u[ps][sp] – 文字列 usp か ups にマッチ – 文字列 uss や upp にもマッチ ● u(sp|ps) – 文字列 usp か ups にマッチ
  20. 20. 正規表現 20 色々な正規表現色々な正規表現 22 ● ^usp – usp で始まる行にマッチ ● usp$ – usp で終わる行にマッチ ● us*p – up 、 usp 、 ussp 、 ussssssssp にマッチ
  21. 21. 正規表現 21 色々な正規表現色々な正規表現 33 ● ([A-Za-z]{3})([0-9]{2}).*21 – usp03To03usp 、 Abc98%$98Abc などにマッチ ● 英字 3 文字数字 2 文字任意の 2 文字数字 2 文字英字 3 文字 ● ^[A-Za-z_][A-Za-z0-9_]* – i 、 counter 、 LoopNum 、 _tpl 、 f1 、 f2 などにマッ チ
  22. 22. 正規表現 22 色々な正規表現色々な正規表現 44 ● [0-9]{3}-[0-9]{4} – 123-4567 などにマッチ(郵便番号) ● [0-9]{1,3} – 1 、 22 、 333 など 3 桁以内の数字にマッチ ● [a-z]{5,} – abcde 、 rstuvwxyz など 5 文字以上の英小文字にマッチ
  23. 23. 正規表現 23 色々な正規表現色々な正規表現 55 ● 時間にマッチ – [0-9]{1,2}:[0-9]{1,2} ● 99:99 などにもマッチ – [01]?[0-9]|2[0-3]:[0-5][0-0]
  24. 24. 正規表現 24 色々な正規表現色々な正規表現 66 ● IPv4 アドレスにマッチ – ([0-9]{1,3}.){3}[0-9]{1,3} ● 999.999.999.999 などにもマッチ – (([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0- 9]{2}|2[0-4][0-9]|25[0-5])
  25. 25. 正規表現 25 色々な(ry色々な(ry ● URLにマッチ – https?:(//(([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=])*@)?([(([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}| 2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]| 1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|([0-9a-f] {1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4] [0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]| 25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,2}[0-9a-f] {1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4] [0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]| 25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,4}[0-9a-f] {1,4})?::([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0- 9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::|v[0-9a-f]+.[!$&-.0-;=_a-z~]+)]|([0-9]|[1-9][0-9]| 1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|([-.0-9_a- z~]|%[0-9a-f][0-9a-f]|[!$&-,;=])*)(:[0-9]*)?(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])*)*|/(([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])+(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[! $&-,:;=@])*)*)?|([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])+(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])*)*)?(?([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,/:;=?@])*)?(#([-.0-9_a-z~]| %[0-9a-f][0-9a-f]|[!$&-,/:;=?@])*)? – https?(://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+) (URIの正規表現 http://sinya8282.sakura.ne.jp/?p=10640 より)
  26. 26. 正規表現 26 色々な(ry その色々な(ry その 22 ● メイルアドレスにマッチ – (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?: [x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a- z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0- 9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?: [x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)]) – .+@.+..+ (Email Address Regular Expression That 99.99% Works. http://emailregex.com/ より)

×