SlideShare una empresa de Scribd logo
1 de 37
正規表現入門 2011/07/02 thinca
正規表現とは?
例えば 携帯電話の番号  090-1234-5678  080-2011-0702  etc… 3桁の数字-4桁の数字-4桁の数字
例えば 1つの正規表現で表現できる 全ての電話番号が検索ができる {3}-{4}-{4}
柔軟に文字列を探すためのツール
どこで使えるのか テキストエディタ 検索 置換 プログラミング言語 組み込み ライブラリ その他テキストのある所
今日やること 正規表現の基本的な概念や機能の解説 具体例はあまりないです
注意点 正規表現には多くの実装がある どの機能が使えるかは実装による 記法が違うことも 必ずマニュアルを確認すること! 文字コードやロケールも絡んでくる 今回は考慮しません
はじめます
用語 パターン 正規表現文字列のこと マッチする パターンが文字列中に見つかること
メタ文字 正規表現として特別な意味を持つ文字 + * ? . ^ $ | ( ) { } [ ] など メタ文字自体にマッチさせたい場合は、でエスケープする 笑
文字 通常の文字は見た目通りにマッチする で始まる特殊な記法がある
文字クラス
文字クラス 文字の集合 集合の中のどれか1文字にマッチする
文字クラスの書き方 [] で文字を囲む これらの文字のいずれかにマッチする - で範囲を指定できる [abc] りゅう[こし] [a-zA-Z]
否定文字クラス 指定した文字以外にマッチする [] の先頭に ^ を付ける [^a-zA-Z]
文字クラス内でのメタ文字 文字クラス内ではメタ文字が変わる [ ] - ^ など それ以外の文字は普通に扱われる [+*?.$|(){}]
定義済み文字クラス
文字クラスあれこれ POSIX 文字クラスと呼ばれるものもある 表記方法はそれぞれ -> Unicode のブロックやカテゴリを使える [[:digit:]] {Digit}  {InHiragana} {InKatakana} {InCJKUnifiedIdeographs}
アンカー 文字ではなく位置にマッチする
量指定子
量指定子 直前の要素の繰り返しを指定する 文字 文字クラス グループ (後述)
量指定子の書き方 {n} で n 回の繰り返し {m,n} で m 回以上 n 回以下の意味 m,nの一方を省略できる ぽ{4}ーん Go{1,10}gle デュラ{3,}
よく使う量指定子 よく使われるものは別に定義してある 普段はこれらだけで十分
最短一致 通常の量指定子は最長一致 ↓ ↓ <div id="foo" class="bar"> ".*" <div id="foo" class="bar">
最短一致 後ろに ? を付けると最短一致に ↓ ↓ <div id="foo" class="bar"> ".*?" <div id="foo" class="bar">
選択
選択 パターンを複数のパターンに区切る 区切ったパターンのうちどれかにマッチすればいい 文字クラスのパターン版と考えることもできる
選択の書き方 パターンを | で区切る いくつでも可能 マリオ|ルイージ マリオ|ルイージ|ピーチ|クッパ|ヨッシー
グループ
グループ パターンをまとめる グループ単体では意味がない まとめた部分に対して 量指定子を使ったり 内部で選択を使ったり 後方参照(後述)に使ったり
グループの書き方 () で囲む 入れ子も可能 (+) ((.*)+)
グループの利用方法 グループに対して量指定子が指定できる グループ内で選択を使うことで、パターンの一部で選択ができる (ほむ){2,} PlayStation (2|3|Portable|Vita)
後方参照 前方参照とも言う  ~  でグループを参照 グループがマッチした部分と同じ文字列になる (.+)ちゃんマジ
グループの順番 グループの ( が出てきた順に番号が付く  = abcdefg  = abcd  = efg  = hijk マッチしなかった部分は空文字列になる ((abcd)(efg))|(hijk)
置換 後方参照は置換の置き換え後にも使える (.+?),(.+?) ,
まだまだある 後方参照しないグループ (肯定|否定)(先読み|後読み) 正規表現オプション 強欲な量指定子 文字クラスの交差 プリプロセス演算 (   )

Más contenido relacionado

La actualidad más candente

対話的フィルターを使って便利に選択
対話的フィルターを使って便利に選択対話的フィルターを使って便利に選択
対話的フィルターを使って便利に選択Hideaki Miyake
 
Jsai2021 winter ppt_ota_20211127
Jsai2021 winter ppt_ota_20211127Jsai2021 winter ppt_ota_20211127
Jsai2021 winter ppt_ota_20211127博三 太田
 
Logics 18th ota_20211201
Logics 18th ota_20211201Logics 18th ota_20211201
Logics 18th ota_20211201博三 太田
 
Python nlp handson_20220225_v5
Python nlp handson_20220225_v5Python nlp handson_20220225_v5
Python nlp handson_20220225_v5博三 太田
 
簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正hirokiky
 

La actualidad más candente (6)

公的文書に対する「やさしい日本語」換言辞書作成のための調査
公的文書に対する「やさしい日本語」換言辞書作成のための調査公的文書に対する「やさしい日本語」換言辞書作成のための調査
公的文書に対する「やさしい日本語」換言辞書作成のための調査
 
対話的フィルターを使って便利に選択
対話的フィルターを使って便利に選択対話的フィルターを使って便利に選択
対話的フィルターを使って便利に選択
 
Jsai2021 winter ppt_ota_20211127
Jsai2021 winter ppt_ota_20211127Jsai2021 winter ppt_ota_20211127
Jsai2021 winter ppt_ota_20211127
 
Logics 18th ota_20211201
Logics 18th ota_20211201Logics 18th ota_20211201
Logics 18th ota_20211201
 
Python nlp handson_20220225_v5
Python nlp handson_20220225_v5Python nlp handson_20220225_v5
Python nlp handson_20220225_v5
 
簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正
 

Destacado

正規表現を覚えよう(初級編)
正規表現を覚えよう(初級編)正規表現を覚えよう(初級編)
正規表現を覚えよう(初級編)Kazuo Suzuki
 
正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)Kazuo Suzuki
 
正規表現で楽しよう
正規表現で楽しよう正規表現で楽しよう
正規表現で楽しよう笹川 純一
 
正規表現
正規表現正規表現
正規表現bsdhack
 
認知科学会サマースクール2015・人工知能と言語機能
認知科学会サマースクール2015・人工知能と言語機能認知科学会サマースクール2015・人工知能と言語機能
認知科学会サマースクール2015・人工知能と言語機能Naoya Arakawa
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanoharaHiroshi Ono
 
Абрамов Н.Н.
Абрамов Н.Н.Абрамов Н.Н.
Абрамов Н.Н.cpii33
 
Aizu.LT::Tokyo #2
Aizu.LT::Tokyo #2Aizu.LT::Tokyo #2
Aizu.LT::Tokyo #2Taku Unno
 
JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響
JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響
JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響Kyoshiro Sugiyama
 
言語処理のための仮説推論エンジン Phillip
言語処理のための仮説推論エンジン Phillip言語処理のための仮説推論エンジン Phillip
言語処理のための仮説推論エンジン PhillipKazeto Yamamoto
 
黒い目の大きな女の子:構文から意味へ
黒い目の大きな女の子:構文から意味へ黒い目の大きな女の子:構文から意味へ
黒い目の大きな女の子:構文から意味へHiroshi Nakagawa
 
会話型ロボットを作った話
会話型ロボットを作った話会話型ロボットを作った話
会話型ロボットを作った話Kasai Nobuhiro
 
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現nkazuki
 
第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッションantibayesian 俺がS式だ
 
検索と自然言語処理
検索と自然言語処理検索と自然言語処理
検索と自然言語処理Wataru ONO
 
自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門Koji Sekiguchi
 
ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...
ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...
ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...Yuya Unno
 

Destacado (20)

正規表現を覚えよう(初級編)
正規表現を覚えよう(初級編)正規表現を覚えよう(初級編)
正規表現を覚えよう(初級編)
 
正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)正規表現を覚えよう(中級編)
正規表現を覚えよう(中級編)
 
正規表現で楽しよう
正規表現で楽しよう正規表現で楽しよう
正規表現で楽しよう
 
正規表現
正規表現正規表現
正規表現
 
研究
研究研究
研究
 
認知科学会サマースクール2015・人工知能と言語機能
認知科学会サマースクール2015・人工知能と言語機能認知科学会サマースクール2015・人工知能と言語機能
認知科学会サマースクール2015・人工知能と言語機能
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanohara
 
Абрамов Н.Н.
Абрамов Н.Н.Абрамов Н.Н.
Абрамов Н.Н.
 
Aizu.LT::Tokyo #2
Aizu.LT::Tokyo #2Aizu.LT::Tokyo #2
Aizu.LT::Tokyo #2
 
JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響
JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響
JSAI 1K3-2 知識ベースに基づく言語横断質問応答における訳質の影響
 
質疑応答
質疑応答質疑応答
質疑応答
 
Qaシステム解説
Qaシステム解説Qaシステム解説
Qaシステム解説
 
言語処理のための仮説推論エンジン Phillip
言語処理のための仮説推論エンジン Phillip言語処理のための仮説推論エンジン Phillip
言語処理のための仮説推論エンジン Phillip
 
黒い目の大きな女の子:構文から意味へ
黒い目の大きな女の子:構文から意味へ黒い目の大きな女の子:構文から意味へ
黒い目の大きな女の子:構文から意味へ
 
会話型ロボットを作った話
会話型ロボットを作った話会話型ロボットを作った話
会話型ロボットを作った話
 
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現
 
第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション
 
検索と自然言語処理
検索と自然言語処理検索と自然言語処理
検索と自然言語処理
 
自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門自然言語処理における機械学習による曖昧性解消入門
自然言語処理における機械学習による曖昧性解消入門
 
ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...
ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...
ACL読み会@PFI “How to make words with vectors: Phrase generation in distributio...
 

Similar a 正規表現入門

スペル修正プログラムの作り方 #pronama
スペル修正プログラムの作り方 #pronamaスペル修正プログラムの作り方 #pronama
スペル修正プログラムの作り方 #pronamaHiroyoshi Komatsu
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documentsbleis tift
 
エンジニア向け即効デザイン講座
エンジニア向け即効デザイン講座エンジニア向け即効デザイン講座
エンジニア向け即効デザイン講座leverages_event
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
20170114 lod challenge
20170114 lod challenge20170114 lod challenge
20170114 lod challengezuhitoslide
 
JavaScriptの正規表現おさらい
JavaScriptの正規表現おさらいJavaScriptの正規表現おさらい
JavaScriptの正規表現おさらいSo Akasaka
 
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"Ryohei Suzuki
 

Similar a 正規表現入門 (7)

スペル修正プログラムの作り方 #pronama
スペル修正プログラムの作り方 #pronamaスペル修正プログラムの作り方 #pronama
スペル修正プログラムの作り方 #pronama
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
 
エンジニア向け即効デザイン講座
エンジニア向け即効デザイン講座エンジニア向け即効デザイン講座
エンジニア向け即効デザイン講座
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
20170114 lod challenge
20170114 lod challenge20170114 lod challenge
20170114 lod challenge
 
JavaScriptの正規表現おさらい
JavaScriptの正規表現おさらいJavaScriptの正規表現おさらい
JavaScriptの正規表現おさらい
 
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"
 

正規表現入門