SlideShare a Scribd company logo
1 of 97
Download to read offline
正規表現 入門
●   2009/06/06
●   mollifier
●   http://d.hatena.ne.jp/mollifier/
正規表現って何 ?
こんなの



ウェブテコ第 [0-9]+ 回
こんなことはありませんか ?
表記の揺れを考慮して
       検索したい

僕は Internet Explorer が大好きです。そ
れは、 InternetExplorer が僕にちょうど良
いスピードで動いてくれるからです。

それに、他では学べない IE 独自の技術も勉
強できるからです。
HTML ファイルから <h*>
( 見出し要素 ) の行だけ探したい

<h1> トマトとチキンの煮込み </h1>
<h2> 材料 </h2>
<ul>
  <li> トマトの水煮 </li>
  <li> 鶏もも肉 </li>
</ul>
こんな時に役に立つのが
    正規表現
正規表現とは

●
    文字列のパターンを表現する方法
●
    複雑な条件でも簡潔に表記できる
正規表現が使用可能なツール
●
    テキストエディタ
     –   秀丸
     –   サクラエディタ
     –   TextMate
     –   vim
     –   emacs
               など
正規表現が使用可能なツール
●
    プログラム言語
     –   JavaScript
     –   Perl
     –   Ruby
     –   Java
     –   C#
                など
こんなものにも




http://www.google.co.jp/codesearch
テキストを扱うツールなら
  たいてい使用できる
ということは ……
一度身につけると
いろんな場面で活用できる
ぜひとも使えるようになりたい
というわけで、
正規表現の使い方を
見ていきましょう
再び さっきの例



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


この [0-9]+ という部分は
正規表現で特別な意味を持つ
このような文字を
メタ文字と呼びます
メタ文字の意味を理解するのが
      大事
メタ文字一覧
●   {n,m}       ●   w
●   {n,}        ●   W
●   {n}         ●   s
●   ?           ●   S
●   +           ●   d
●   *           ●   D
●   [...]       ●   t
●   [^...]      ●   n
●   .           ●   r
まだまだあります
●   |             ●   (?=pattern)
●   (pattern)     ●   (?!pattern)
●   (?:pattern)   ●   *?
●   ^             ●   +?
●   $             ●   ??
●   b            ●   {n,m}?
●   B            ●   {n,}?
                  ●   {n}?
Never Ending
●   A              ●   (?<name>pattern)
●   Z              ●   (?ipattern)
●   z              ●   *+
●   G              ●   ++
●   (?#...)         ●   ?+
●   (?<=pattern)    ●   {n,m}+
●   (?<!pattern)    ●   {n,}+
●   (?>pattern)     ●   {n}+
いっぱいありすぎ
でも、よく使うのはごく一部
よく使うもの その 1
●   . ( ドット )
      –   任意の 1 文字
●   [...]
      –   [ ] 内の任意の 1 文字
●   [^...]
      –   [ ] 内に含まれない
            任意の 1 文字
. ( ドット ) を使う例



 ミッキー . ウス
ミッキー . ウス

●
    マッチする
     – ミッキーガウス


●
    マッチしない
     – ミッキーママウス
[...] を使う例



今日は [456] 月です
今日は [456] 月です

●
    マッチする
     – 今日は   6 月です

●
    マッチしない
     – 今日は   3 月です
[ - ] で範囲の指定



今日は [0-9] 日です
今日は [0-9] 日です

●
    マッチする
     – 今日は   6 日です

●
    マッチしない
     – 今日は   10 日です
     – 今日は祝日です
[^...] を使う例



今日は [^0][0-9] 日です
今日は [^0][0-9] 日です

●
    マッチする
     – 今日は   10 日です

●
    マッチしない
     – 今日は   06 日です
これらはすべて
「何か 1 文字」 にマッチする
よく使うもの その 2

●   *
        –   直前の項目を 0 回以上繰り返す
●   +
        –   直前の項目を 1 回以上繰り返す
* を使う例



  url *=
( スペースの後に *)
url *=
●
    マッチする
     –   url=”http://webteko.jp/”;
     –   url =”http://webteko.jp/”;
     –   url    =”http://webteko.jp/”;


●
    マッチしない
     –   url;
+ を使う例



<div +class=”main”
    ( スペースの後に +)
<div +class=”main”
●
    マッチする
     –   <div class=”main”
     –   <div    class=”main”


●
    マッチしない
     –   <divclass=”main”
これらはすべて
繰り返し回数を指定する
よく使うもの その 3

●   ^
        –   行の先頭
●   $
        –   行のの最後
^ を使う例



 ^[0-9]
^[0-9]

●
    マッチする
     – 3.2   文字列

●
    マッチしない
     – Opera
         10 ベータ版が
       リリースされました
$ を使う例



^[0-9]+$
^[0-9]+$

●
    マッチする
     –0

     – 177


●
    マッチしない
     – 1,000
これらはすべて
位置にマッチする
位置を固定するところから
「アンカー」とも呼ばれる
ここまでのまとめ
何か 1 文字にマッチする

● . ( ドット )
● [...]


● [^...]
繰り返し回数を指定する


●*
●+
位置にマッチする
      ( アンカー )

●^
●$
この 7 種類だけでも
かなり凝ったことが出来る
他にも色々メタ文字があるけど
    基本は同じ
この 3 種類のどれか

●
    何か 1 文字にマッチする
●
    繰り返し回数を指定する
●
    位置にマッチする
メタ文字一覧とかを見ながら
  使ってみてください
ここからが本番
正規表現処理のしくみ
正規表現マッチングのメカニズ
ムについて、もう少し詳しく見
    てみましょう
例題
パス名からディレクトリ部分を
    取り除きたい

●
    /etc/hosts     -> hosts
●
    /usr/bin/zsh   -> zsh
いきなり答え
こんな風に置換すれば OK

●
    検索する文字列
     ^.*/

●
    置換する文字列
     空文字列
/usr/bin/zsh


下線部が ^.*/ にマッチする
ん ? でも
何通りにも解釈
      できるんですけど
1./usr/bin/zsh
2./usr/bin/zsh   ^.*/
3./usr/bin/zsh
結局どれ ?
マッチング処理を最初から
   順番に見てみる
開始位置が先頭に固定される

/usr/bin/zsh


^ . */
先頭の / が .* にマッチする

 /usr/bin/zsh


 ^ .* /
もうちょっと詳しい説明

●
    .* の繰り返し回数は
     「何回でも良い」
もうちょっと詳しい説明

●
    なので、 .* にとっては
     / を「掴む」か「掴まない」か
     2 つ選択肢がある
もうちょっと詳しい説明

●
    そういうときは「掴む」方を選ぶ
●
    つまり長くなる方を選ぶ
●
    この動作を「欲張り」と呼ぶ
次の u も .* にマッチする

/usr/bin/zsh


^ .* /
どんどんマッチする

/usr/bin/zsh


^ .* /
結局、全部 .* にマッチする

 /usr/bin/zsh


 ^ .* /
最後の / にマッチする
文字がない

/usr/bin/zsh
               ない




^ .* /
じゃあ、マッチ失敗 ?
いやいや、そうじゃない

●
    .* は「任意の回数」のなので、
     最後まで掴まなくても良い
いやいや、そうじゃない
●
    .* が最後の h を「掴む」ことを
    選らんだら、
    全体としてマッチに失敗した
いやいや、そうじゃない
●
        .* が最後の h を「掴む」ことを
        選らんだら、
        全体としてマッチに失敗した


    ●
        .* が h を「掴まない」方を
         選んでみる
1 文字手放す

/usr/bin/zsh


^ .* /
これでもマッチ失敗

/usr/bin/zsh


^ .* /
もう 1 文字手放す

/usr/bin/zsh


^ .* /
成功するまで手放す

/usr/bin/zsh


^ .* /
やった ! マッチ成功

/usr/bin/zsh


^ .* /
というわけで、全体として
下線部がマッチした

 /usr/bin/zsh


 ^ .* /
ここを空文字に置換すると


/usr/bin/zsh
ディレクトリ部分がなくなる


/usr/bin/zsh

         zsh
繰り返し回数の選び方
●
    選択肢が 2 つあったら、
     まずは長くなる方を試す


●
    全体としてマッチに失敗したら、
     選ばれなかった方を試す
言い方を変えると
●
    * とか + とか
     回数指定は欲張り


●
    欲張りすぎて全体として
     マッチに失敗してしまう場合は
     文字を手放す
ここまで分かれば
微妙な問題でも
どこにマッチするか分かる
まとめ
まとめ
●
    正規表現のメタ文字は
     いっぱいある


●
    基本的なやつが分かってしまえば、
     あとは一覧表を見ながら
     使えば OK
まとめ
●
    * や + は欲張り


●
    欲張りすぎてマッチに失敗する
     ときは文字を手放す
ぜひ、正規表現を
使ってみてください
ありがとうございました

More Related Content

What's hot

Jaws2008 Presen12
Jaws2008 Presen12Jaws2008 Presen12
Jaws2008 Presen12umekoumeda
 
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜Hiromu Shioya
 
Copyright and Creative Commons
Copyright and Creative CommonsCopyright and Creative Commons
Copyright and Creative CommonsJun Nogata
 
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向handbook
 
JavaScriptによるゲーム開発
JavaScriptによるゲーム開発JavaScriptによるゲーム開発
JavaScriptによるゲーム開発Hiroaki NAKADA
 
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)handbook
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会uchan_nos
 
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖handbook
 
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴opengroove
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanoharaHiroshi Ono
 
株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北sunseago
 
iReport實做練習part(1)
iReport實做練習part(1) iReport實做練習part(1)
iReport實做練習part(1) seatof
 
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発devsumi2009
 
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4Komoriya Kazunari
 
DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟handbook
 
Perl で入門テキストマイニング
Perl で入門テキストマイニングPerl で入門テキストマイニング
Perl で入門テキストマイニングyto
 
24 dec janta ka aaina (1)
24 dec janta ka aaina (1)24 dec janta ka aaina (1)
24 dec janta ka aaina (1)Suniel Gowtham
 

What's hot (20)

Jaws2008 Presen12
Jaws2008 Presen12Jaws2008 Presen12
Jaws2008 Presen12
 
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜
 
Copyright and Creative Commons
Copyright and Creative CommonsCopyright and Creative Commons
Copyright and Creative Commons
 
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向
 
JavaScriptによるゲーム開発
JavaScriptによるゲーム開発JavaScriptによるゲーム開発
JavaScriptによるゲーム開発
 
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
 
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖
 
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanohara
 
株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北
 
iReport實做練習part(1)
iReport實做練習part(1) iReport實做練習part(1)
iReport實做練習part(1)
 
A* Algorithm
A* AlgorithmA* Algorithm
A* Algorithm
 
开题报告
开题报告开题报告
开题报告
 
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
 
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4
 
DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟
 
Perl で入門テキストマイニング
Perl で入門テキストマイニングPerl で入門テキストマイニング
Perl で入門テキストマイニング
 
24 dec janta ka aaina (1)
24 dec janta ka aaina (1)24 dec janta ka aaina (1)
24 dec janta ka aaina (1)
 
Systemdevelopment
SystemdevelopmentSystemdevelopment
Systemdevelopment
 

Viewers also liked

Altea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit MicrosoftAltea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit MicrosoftAltea SpA
 
Krsna Book Volume 2
Krsna Book Volume 2Krsna Book Volume 2
Krsna Book Volume 2Subhashitam
 
La resistencia aeróbica
La resistencia aeróbicaLa resistencia aeróbica
La resistencia aeróbicagabriela9791
 
Demonstration of \"Our Legacy\" Aboriginal Web Site
Demonstration of \"Our Legacy\" Aboriginal Web SiteDemonstration of \"Our Legacy\" Aboriginal Web Site
Demonstration of \"Our Legacy\" Aboriginal Web SiteDarlene Fichter
 
〈青字歌〉
〈青字歌〉〈青字歌〉
〈青字歌〉cheuk1991
 
Онлайн-консультант для интернет-сервисов
Онлайн-консультант для интернет-сервисовОнлайн-консультант для интернет-сервисов
Онлайн-консультант для интернет-сервисовAstra Media Group, Russia
 
Как дизайн влияет на продажи интернет-магазина
Как дизайн влияет на продажи интернет-магазинаКак дизайн влияет на продажи интернет-магазина
Как дизайн влияет на продажи интернет-магазинаAstra Media Group, Russia
 
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge KETAN VAGHOLKAR
 
What is a high performance organization (hpo)
What is a high performance organization (hpo)What is a high performance organization (hpo)
What is a high performance organization (hpo)maruay songtanin
 

Viewers also liked (15)

Life settlements the real story 15
Life settlements the real story 15Life settlements the real story 15
Life settlements the real story 15
 
Altea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit MicrosoftAltea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit Microsoft
 
Balancing your life
Balancing your lifeBalancing your life
Balancing your life
 
Krsna Book Volume 2
Krsna Book Volume 2Krsna Book Volume 2
Krsna Book Volume 2
 
La resistencia aeróbica
La resistencia aeróbicaLa resistencia aeróbica
La resistencia aeróbica
 
Demonstration of \"Our Legacy\" Aboriginal Web Site
Demonstration of \"Our Legacy\" Aboriginal Web SiteDemonstration of \"Our Legacy\" Aboriginal Web Site
Demonstration of \"Our Legacy\" Aboriginal Web Site
 
Simha_RP
Simha_RPSimha_RP
Simha_RP
 
〈青字歌〉
〈青字歌〉〈青字歌〉
〈青字歌〉
 
Онлайн-консультант для интернет-сервисов
Онлайн-консультант для интернет-сервисовОнлайн-консультант для интернет-сервисов
Онлайн-консультант для интернет-сервисов
 
Как дизайн влияет на продажи интернет-магазина
Как дизайн влияет на продажи интернет-магазинаКак дизайн влияет на продажи интернет-магазина
Как дизайн влияет на продажи интернет-магазина
 
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
 
18091301
1809130118091301
18091301
 
Hoja de vida corporativa
Hoja de vida corporativaHoja de vida corporativa
Hoja de vida corporativa
 
Práctica 6
Práctica 6Práctica 6
Práctica 6
 
What is a high performance organization (hpo)
What is a high performance organization (hpo)What is a high performance organization (hpo)
What is a high performance organization (hpo)
 

Regex Introduction