Submit Search
Upload
Regex Introduction
•
0 likes
•
481 views
Hideaki Miyake
Follow
Webteko第7回で発表した"正規表現入門"の資料
Read less
Read more
Report
Share
Report
Share
1 of 97
Download now
Download to read offline
Recommended
手探りの私にもわかる気がしている関数型言語
手探りの私にもわかる気がしている関数型言語
mitsutaka mimura
はじめてのパターン認識 p.159~177
はじめてのパターン認識 p.159~177
ssuser74dafc
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
Hiroshi Ono
100420
100420
Hiroshi Ono
テスト駆動開発のエッセンス
テスト駆動開発のエッセンス
hiroyuki Yamamoto
Ruby による Agile 開発
Ruby による Agile 開発
Kenji Hiranabe
Fantasista Appendix1.0
Fantasista Appendix1.0
fantasistaVppr
Abacus tamil (Sun Easy Abacus)
Abacus tamil (Sun Easy Abacus)
R Sunder Raj
Recommended
手探りの私にもわかる気がしている関数型言語
手探りの私にもわかる気がしている関数型言語
mitsutaka mimura
はじめてのパターン認識 p.159~177
はじめてのパターン認識 p.159~177
ssuser74dafc
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
Hiroshi Ono
100420
100420
Hiroshi Ono
テスト駆動開発のエッセンス
テスト駆動開発のエッセンス
hiroyuki Yamamoto
Ruby による Agile 開発
Ruby による Agile 開発
Kenji Hiranabe
Fantasista Appendix1.0
Fantasista Appendix1.0
fantasistaVppr
Abacus tamil (Sun Easy Abacus)
Abacus tamil (Sun Easy Abacus)
R Sunder Raj
Jaws2008 Presen12
Jaws2008 Presen12
umekoumeda
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
Hiromu Shioya
Copyright and Creative Commons
Copyright and Creative Commons
Jun Nogata
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向
handbook
JavaScriptによるゲーム開発
JavaScriptによるゲーム開発
Hiroaki NAKADA
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
handbook
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
uchan_nos
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖
handbook
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
opengroove
sigfpai2009_okanohara
sigfpai2009_okanohara
Hiroshi Ono
株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北
sunseago
iReport實做練習part(1)
iReport實做練習part(1)
seatof
A* Algorithm
A* Algorithm
Frank Chang
开题报告
开题报告
chenkkkabc
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
devsumi2009
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4
Komoriya Kazunari
DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟
handbook
Perl で入門テキストマイニング
Perl で入門テキストマイニング
yto
24 dec janta ka aaina (1)
24 dec janta ka aaina (1)
Suniel Gowtham
Systemdevelopment
Systemdevelopment
Hiroshi Oyamada
Life settlements the real story 15
Life settlements the real story 15
Business Software, Inc.
Altea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit Microsoft
Altea SpA
More Related Content
What's hot
Jaws2008 Presen12
Jaws2008 Presen12
umekoumeda
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
Hiromu Shioya
Copyright and Creative Commons
Copyright and Creative Commons
Jun Nogata
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向
handbook
JavaScriptによるゲーム開発
JavaScriptによるゲーム開発
Hiroaki NAKADA
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
handbook
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
uchan_nos
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖
handbook
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
opengroove
sigfpai2009_okanohara
sigfpai2009_okanohara
Hiroshi Ono
株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北
sunseago
iReport實做練習part(1)
iReport實做練習part(1)
seatof
A* Algorithm
A* Algorithm
Frank Chang
开题报告
开题报告
chenkkkabc
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
devsumi2009
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4
Komoriya Kazunari
DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟
handbook
Perl で入門テキストマイニング
Perl で入門テキストマイニング
yto
24 dec janta ka aaina (1)
24 dec janta ka aaina (1)
Suniel Gowtham
Systemdevelopment
Systemdevelopment
Hiroshi Oyamada
What's hot
(20)
Jaws2008 Presen12
Jaws2008 Presen12
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
Copyright and Creative Commons
Copyright and Creative Commons
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向
JavaScriptによるゲーム開発
JavaScriptによるゲーム開発
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
CEO-032-平衡計分卡概念與實務簡述(鴻海案例)
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
sigfpai2009_okanohara
sigfpai2009_okanohara
株式会社 花みずき工房 きらりタウン浜北
株式会社 花みずき工房 きらりタウン浜北
iReport實做練習part(1)
iReport實做練習part(1)
A* Algorithm
A* Algorithm
开题报告
开题报告
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
【12-A-5】 ユーザー企業責任で25サイトをアジャイルに開発
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4
DS-026-知識管理的導入策略與步驟
DS-026-知識管理的導入策略與步驟
Perl で入門テキストマイニング
Perl で入門テキストマイニング
24 dec janta ka aaina (1)
24 dec janta ka aaina (1)
Systemdevelopment
Systemdevelopment
Viewers also liked
Life settlements the real story 15
Life settlements the real story 15
Business Software, Inc.
Altea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit Microsoft
Altea SpA
Balancing your life
Balancing your life
maruay songtanin
Krsna Book Volume 2
Krsna Book Volume 2
Subhashitam
La resistencia aeróbica
La resistencia aeróbica
gabriela9791
Demonstration of \"Our Legacy\" Aboriginal Web Site
Demonstration of \"Our Legacy\" Aboriginal Web Site
Darlene Fichter
Simha_RP
Simha_RP
Prithvi Simha
〈青字歌〉
〈青字歌〉
cheuk1991
Онлайн-консультант для интернет-сервисов
Онлайн-консультант для интернет-сервисов
Astra Media Group, Russia
Как дизайн влияет на продажи интернет-магазина
Как дизайн влияет на продажи интернет-магазина
Astra Media Group, Russia
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
KETAN VAGHOLKAR
18091301
18091301
Josinaldo Almeida Figueiredo Figueiredo
Hoja de vida corporativa
Hoja de vida corporativa
anamaria rodriguez
Práctica 6
Práctica 6
Salud Molina Muñoz
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 15
Altea, Presentazione Business Unit Microsoft
Altea, Presentazione Business Unit Microsoft
Balancing your life
Balancing your life
Krsna Book Volume 2
Krsna Book Volume 2
La resistencia aeróbica
La resistencia aeróbica
Demonstration of \"Our Legacy\" Aboriginal Web Site
Demonstration of \"Our Legacy\" Aboriginal Web Site
Simha_RP
Simha_RP
〈青字歌〉
〈青字歌〉
Онлайн-консультант для интернет-сервисов
Онлайн-консультант для интернет-сервисов
Как дизайн влияет на продажи интернет-магазина
Как дизайн влияет на продажи интернет-магазина
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
Isolated tuberculous inguinal lymphadenopathy: a diagnostic challenge
18091301
18091301
Hoja de vida corporativa
Hoja de vida corporativa
Práctica 6
Práctica 6
What is a high performance organization (hpo)
What is a high performance organization (hpo)
Regex Introduction
1.
正規表現 入門 ●
2009/06/06 ● mollifier ● http://d.hatena.ne.jp/mollifier/
2.
正規表現って何 ?
3.
こんなの ウェブテコ第 [0-9]+ 回
4.
こんなことはありませんか ?
5.
表記の揺れを考慮して
検索したい 僕は Internet Explorer が大好きです。そ れは、 InternetExplorer が僕にちょうど良 いスピードで動いてくれるからです。 それに、他では学べない IE 独自の技術も勉 強できるからです。
6.
HTML ファイルから <h*> (
見出し要素 ) の行だけ探したい <h1> トマトとチキンの煮込み </h1> <h2> 材料 </h2> <ul> <li> トマトの水煮 </li> <li> 鶏もも肉 </li> </ul>
7.
こんな時に役に立つのが
正規表現
8.
正規表現とは ●
文字列のパターンを表現する方法 ● 複雑な条件でも簡潔に表記できる
9.
正規表現が使用可能なツール ●
テキストエディタ – 秀丸 – サクラエディタ – TextMate – vim – emacs など
10.
正規表現が使用可能なツール ●
プログラム言語 – JavaScript – Perl – Ruby – Java – C# など
11.
こんなものにも http://www.google.co.jp/codesearch
12.
テキストを扱うツールなら たいてい使用できる
13.
ということは ……
14.
一度身につけると いろんな場面で活用できる
15.
ぜひとも使えるようになりたい
16.
というわけで、 正規表現の使い方を 見ていきましょう
17.
再び さっきの例 ウェブテコ第 [0-9]+
回
18.
ウェブテコ第 [0-9]+ 回 この
[0-9]+ という部分は 正規表現で特別な意味を持つ
19.
このような文字を メタ文字と呼びます
20.
メタ文字の意味を理解するのが
大事
21.
メタ文字一覧 ●
{n,m} ● w ● {n,} ● W ● {n} ● s ● ? ● S ● + ● d ● * ● D ● [...] ● t ● [^...] ● n ● . ● r
22.
まだまだあります ●
| ● (?=pattern) ● (pattern) ● (?!pattern) ● (?:pattern) ● *? ● ^ ● +? ● $ ● ?? ● b ● {n,m}? ● B ● {n,}? ● {n}?
23.
Never Ending ●
A ● (?<name>pattern) ● Z ● (?ipattern) ● z ● *+ ● G ● ++ ● (?#...) ● ?+ ● (?<=pattern) ● {n,m}+ ● (?<!pattern) ● {n,}+ ● (?>pattern) ● {n}+
24.
いっぱいありすぎ
25.
でも、よく使うのはごく一部
26.
よく使うもの その 1 ●
. ( ドット ) – 任意の 1 文字 ● [...] – [ ] 内の任意の 1 文字 ● [^...] – [ ] 内に含まれない 任意の 1 文字
27.
. ( ドット
) を使う例 ミッキー . ウス
28.
ミッキー . ウス ●
マッチする – ミッキーガウス ● マッチしない – ミッキーママウス
29.
[...] を使う例 今日は [456]
月です
30.
今日は [456] 月です ●
マッチする – 今日は 6 月です ● マッチしない – 今日は 3 月です
31.
[ - ]
で範囲の指定 今日は [0-9] 日です
32.
今日は [0-9] 日です ●
マッチする – 今日は 6 日です ● マッチしない – 今日は 10 日です – 今日は祝日です
33.
[^...] を使う例 今日は [^0][0-9]
日です
34.
今日は [^0][0-9] 日です ●
マッチする – 今日は 10 日です ● マッチしない – 今日は 06 日です
35.
これらはすべて 「何か 1 文字」
にマッチする
36.
よく使うもの その 2 ●
* – 直前の項目を 0 回以上繰り返す ● + – 直前の項目を 1 回以上繰り返す
37.
* を使う例
url *= ( スペースの後に *)
38.
url *= ●
マッチする – url=”http://webteko.jp/”; – url =”http://webteko.jp/”; – url =”http://webteko.jp/”; ● マッチしない – url;
39.
+ を使う例 <div +class=”main”
( スペースの後に +)
40.
<div +class=”main” ●
マッチする – <div class=”main” – <div class=”main” ● マッチしない – <divclass=”main”
41.
これらはすべて 繰り返し回数を指定する
42.
よく使うもの その 3 ●
^ – 行の先頭 ● $ – 行のの最後
43.
^ を使う例 ^[0-9]
44.
^[0-9] ●
マッチする – 3.2 文字列 ● マッチしない – Opera 10 ベータ版が リリースされました
45.
$ を使う例 ^[0-9]+$
46.
^[0-9]+$ ●
マッチする –0 – 177 ● マッチしない – 1,000
47.
これらはすべて 位置にマッチする
48.
位置を固定するところから 「アンカー」とも呼ばれる
49.
ここまでのまとめ
50.
何か 1 文字にマッチする ●
. ( ドット ) ● [...] ● [^...]
51.
繰り返し回数を指定する ●* ●+
52.
位置にマッチする
( アンカー ) ●^ ●$
53.
この 7 種類だけでも かなり凝ったことが出来る
54.
他にも色々メタ文字があるけど
基本は同じ
55.
この 3 種類のどれか ●
何か 1 文字にマッチする ● 繰り返し回数を指定する ● 位置にマッチする
56.
メタ文字一覧とかを見ながら 使ってみてください
57.
ここからが本番
58.
正規表現処理のしくみ
59.
正規表現マッチングのメカニズ ムについて、もう少し詳しく見
てみましょう
60.
例題
61.
パス名からディレクトリ部分を
取り除きたい ● /etc/hosts -> hosts ● /usr/bin/zsh -> zsh
62.
いきなり答え
63.
こんな風に置換すれば OK ●
検索する文字列 ^.*/ ● 置換する文字列 空文字列
64.
/usr/bin/zsh 下線部が ^.*/ にマッチする
65.
ん ? でも
66.
何通りにも解釈
できるんですけど 1./usr/bin/zsh 2./usr/bin/zsh ^.*/ 3./usr/bin/zsh
67.
結局どれ ?
68.
マッチング処理を最初から
順番に見てみる
69.
開始位置が先頭に固定される /usr/bin/zsh ^ . */
70.
先頭の / が
.* にマッチする /usr/bin/zsh ^ .* /
71.
もうちょっと詳しい説明 ●
.* の繰り返し回数は 「何回でも良い」
72.
もうちょっと詳しい説明 ●
なので、 .* にとっては / を「掴む」か「掴まない」か 2 つ選択肢がある
73.
もうちょっと詳しい説明 ●
そういうときは「掴む」方を選ぶ ● つまり長くなる方を選ぶ ● この動作を「欲張り」と呼ぶ
74.
次の u も
.* にマッチする /usr/bin/zsh ^ .* /
75.
どんどんマッチする /usr/bin/zsh ^ .* /
76.
結局、全部 .* にマッチする
/usr/bin/zsh ^ .* /
77.
最後の / にマッチする 文字がない /usr/bin/zsh
ない ^ .* /
78.
じゃあ、マッチ失敗 ?
79.
いやいや、そうじゃない ●
.* は「任意の回数」のなので、 最後まで掴まなくても良い
80.
いやいや、そうじゃない ●
.* が最後の h を「掴む」ことを 選らんだら、 全体としてマッチに失敗した
81.
いやいや、そうじゃない ●
.* が最後の h を「掴む」ことを 選らんだら、 全体としてマッチに失敗した ● .* が h を「掴まない」方を 選んでみる
82.
1 文字手放す /usr/bin/zsh ^ .*
/
83.
これでもマッチ失敗 /usr/bin/zsh ^ .* /
84.
もう 1 文字手放す /usr/bin/zsh ^
.* /
85.
成功するまで手放す /usr/bin/zsh ^ .* /
86.
やった ! マッチ成功 /usr/bin/zsh ^
.* /
87.
というわけで、全体として 下線部がマッチした /usr/bin/zsh ^
.* /
88.
ここを空文字に置換すると /usr/bin/zsh
89.
ディレクトリ部分がなくなる /usr/bin/zsh
zsh
90.
繰り返し回数の選び方 ●
選択肢が 2 つあったら、 まずは長くなる方を試す ● 全体としてマッチに失敗したら、 選ばれなかった方を試す
91.
言い方を変えると ●
* とか + とか 回数指定は欲張り ● 欲張りすぎて全体として マッチに失敗してしまう場合は 文字を手放す
92.
ここまで分かれば 微妙な問題でも どこにマッチするか分かる
93.
まとめ
94.
まとめ ●
正規表現のメタ文字は いっぱいある ● 基本的なやつが分かってしまえば、 あとは一覧表を見ながら 使えば OK
95.
まとめ ●
* や + は欲張り ● 欲張りすぎてマッチに失敗する ときは文字を手放す
96.
ぜひ、正規表現を 使ってみてください
97.
ありがとうございました
Download now