Submit Search
Upload
中級正規表現
•
1 like
•
1,686 views
京大 マイコンクラブ
Follow
あまり知られていない正規表現の機能(3種類の量指定子の違い)を正規表現エンジンの内部的な挙動と関連付けて説明しています。おまけで名前付きキャプチャの説明もしています。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
Kabsch Fit on PyMOL
Kabsch Fit on PyMOL
Masahito Ohue
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14
Kenta Hattori
Quine
Quine
京大 マイコンクラブ
動的計画法
動的計画法
京大 マイコンクラブ
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
Topological data analysis
Topological data analysis
京大 マイコンクラブ
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
京大 マイコンクラブ
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
京大 マイコンクラブ
Recommended
Kabsch Fit on PyMOL
Kabsch Fit on PyMOL
Masahito Ohue
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14
Kenta Hattori
Quine
Quine
京大 マイコンクラブ
動的計画法
動的計画法
京大 マイコンクラブ
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
Topological data analysis
Topological data analysis
京大 マイコンクラブ
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
京大 マイコンクラブ
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
京大 マイコンクラブ
Common Lisp入門
Common Lisp入門
京大 マイコンクラブ
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
京大 マイコンクラブ
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
Geometry with Unity
Geometry with Unity
京大 マイコンクラブ
セミコロンレスc++
セミコロンレスc++
京大 マイコンクラブ
エンジニアと健康
エンジニアと健康
京大 マイコンクラブ
女の子になれなかった人のために
女の子になれなかった人のために
京大 マイコンクラブ
Pietで競プロしよう
Pietで競プロしよう
京大 マイコンクラブ
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
京大 マイコンクラブ
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
京大 マイコンクラブ
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
京大 マイコンクラブ
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
京大 マイコンクラブ
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
京大 マイコンクラブ
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
京大 マイコンクラブ
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
京大 マイコンクラブ
Altseed
Altseed
京大 マイコンクラブ
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
京大 マイコンクラブ
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
京大 マイコンクラブ
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
京大 マイコンクラブ
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
More Related Content
More from 京大 マイコンクラブ
Common Lisp入門
Common Lisp入門
京大 マイコンクラブ
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
京大 マイコンクラブ
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
Geometry with Unity
Geometry with Unity
京大 マイコンクラブ
セミコロンレスc++
セミコロンレスc++
京大 マイコンクラブ
エンジニアと健康
エンジニアと健康
京大 マイコンクラブ
女の子になれなかった人のために
女の子になれなかった人のために
京大 マイコンクラブ
Pietで競プロしよう
Pietで競プロしよう
京大 マイコンクラブ
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
京大 マイコンクラブ
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
京大 マイコンクラブ
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
京大 マイコンクラブ
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
京大 マイコンクラブ
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
京大 マイコンクラブ
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
京大 マイコンクラブ
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
京大 マイコンクラブ
Altseed
Altseed
京大 マイコンクラブ
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
京大 マイコンクラブ
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
京大 マイコンクラブ
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
京大 マイコンクラブ
More from 京大 マイコンクラブ
(20)
Common Lisp入門
Common Lisp入門
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
Geometry with Unity
Geometry with Unity
セミコロンレスc++
セミコロンレスc++
エンジニアと健康
エンジニアと健康
女の子になれなかった人のために
女の子になれなかった人のために
Pietで競プロしよう
Pietで競プロしよう
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
Altseed
Altseed
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
Recently uploaded
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
Recently uploaded
(14)
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
中級正規表現
1.
中級正規表現 大林一平 KMC/Dept. Math., Kyoto
U./JST CREST 2013/08/17,24 Kobe Rubyist Meetup 1st +α 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 1 / 21
2.
自己紹介 大林一平 (ohai) 理学研究科数学教室 ▶ ▶ ▶ 特定研究員 力学系 最近は歩行の数理モデルの相空間のグローバルな力学 系構造の解析 Ruby ▶ ▶ るりま (http://doc.ruby-lang.org) Ruby/SDL 大林一平
(KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 2 / 21
3.
題目 正規表現 NFA 絶対最大量指定子とアトミックグループ 先読み,後読み,アンカー 名前付きキャプチャ 参考資料 大林一平 (KMC/Dept. Math.,
Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 3 / 21
4.
正規表現 文字列を判別するためのプログラミング言語 ▶ ▶ 元は数学的な「言語」理論のために発明された DSL 高度な制御機構 ▶ ▶ 高い抽象性 後で説明する「バックトラック」 短く書ける構文 低い抽象化能力 ▶ 変数,関数,に相当する機能が貧弱 ⋆ ▶ ⋆ ▶ ないことはない 上部の言語 (Ruby) との連携能力が弱い 例えば正規表現の処理中に
Ruby のコードを呼びだすこと はできない そのため何でも正規表現で処理するのはよくない 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 4 / 21
5.
NFA Non determistic Finite
Automaton 大半の正規表現エンジンで使われている仕組み ▶ ▶ Perl PCRE(Perl Compatible Regular Expression) ⋆ ▶ ⋆ ▶ PHP, Apache, R, etc. Oniguruma, Onigmo Ruby 1.9 以降, PHP5 以降 Python 別の仕組みとして DFA, Posix NFA, ハイブリッド, などがある DFA と比較して柔軟で複雑な処理が可能だが,性 能には劣る 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 5 / 21
6.
NFA の利点と欠点 DFA と比べて以下の利点がある. 後方参照
1, . . . が使える 先読みなどができる さらなる拡張が可能 ▶ ▶ 条件分岐 部分式呼び出し Finite Automaton の数理的能力を越える 欠点は性能上 DFA に比べ劣ること.特に NFA の場合 は「うっかり」酷い性能の正規表現を書いてしまえる 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 6 / 21
7.
バックトラック NFA の動作の基本原理 再帰呼び出しのようなもの ▶ 深さ優先探索 2 つの選択子がある場合,一方を保留しつつもう 一方のマッチを試す ▶ 例えば
/a+b/ で “a” にマッチした場合, ⋆ ⋆ もう一文字 a のマッチをする b のマッチをする の 2 つがある 試したマッチがその先で失敗した場合,保留した ところまで戻って別の選択子を試す 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 7 / 21
8.
/[abc]*b/.match("abbca") 大林一平 (KMC/Dept. Math.,
Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 8 / 21
9.
/[abc]*b/.match("abbca") 大林一平 (KMC/Dept. Math.,
Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 9 / 21
10.
/[abc]*b/.match("abbca") * は greedy
なので,[abc] の繰り返しマッチを優先する 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 10 / 21
11.
/[abc]*?b/.match("abbca") *? は reluctant
なので,b のマッチを優先する 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 11 / 21
12.
最小量指定子の活用例 ダブルクオートで囲まれたテキストを取り出す. /"(.*?)"/ 普通の量指定子を使うと 3 つ以上のダブルクオートが 文字列に含まれていると問題になる. 大林一平
(KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 12 / 21
13.
正規表現の性能 tree 構造によって性能は劇的に異なる. 特にマッチが失敗する場合はチェ ックする場合の 数が膨大になる可能性がある 大林一平 (KMC/Dept.
Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 13 / 21
14.
特に量指定子がネストしていると場合の数の爆発が起 きやすい /X(.+)+X/ 大林一平 (KMC/Dept. Math.,
Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 14 / 21
15.
バックトラックの抑制 高機能な NFA エンジンには,バックトラックを抑制す る仕組みを持つものがある. 絶対最大量指定子
(possessive quantifier) ▶ 繰り返し内でのバックトラックを一切しない アトミックグループ ▶ グループ内のマッチが一度成功すると,その内側では バックトラックしなくなる 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 15 / 21
16.
/[abc]*+b/.match("abbca") 水色の○の手前まで戻る (つまり失敗する) マッチが失敗しやすくなる ▶ 失敗したほうが都合が良い場合に使えなくもない 性能の向上に使える ▶ 特にマッチ失敗時の性能に良く効く 大林一平 (KMC/Dept.
Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 16 / 21
17.
例 メールヘッダの取り出し /A[^:]+:/ /A[^:]++:/ 絶対最大量指定子を使うと,メールヘッダ「でない」 場合には失敗するまでの計算時間が短くなる 大林一平 (KMC/Dept. Math.,
Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 17 / 21
18.
名前付きキャプチャ キャプチャや後方参照は通常 1, 2,
. . . , という名前 が付けられる 識別子で名前を付けることができる (?<name>pat) でキャプチャし,k<name> で後方 参照 MatchData#[sym] でマッチ後に参照できる =~ でリテラル正規表現をマッチする場合はロー カル変数に束縛される $1 とかを使う必要がなくなる 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 18 / 21
19.
例 str = "x
= 128" m = /A(?<var>[a-zA-Z_])s*=s*(?<val>d+)s*z/.match(str) m[:var] # => "x" m[:val] # => "128" /A(?<var>[a-zA-Z_])s*=s*(?<val>d+)s*z/ =~ str var # => "x" val # => "128" 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 19 / 21
20.
参考資料 詳説正規表現 (Mastering Regular
Expressions) Jeffrey E. F. Friedl 著 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 20 / 21
21.
Q&A Q. 以下の 2
つの正規表現のうちどちらが良いの? /"[^"]*"/ /".*?"/ A. 一般的に言って,最小量指定子は性能が良くないこ とが多いようです (上の例では数%の差が生じるようで す).また,最小量指定子を知らない人も多いので,前 者を使ったほうが良いように思われます.もっと複雑 な括弧の対応 (例えば HTML のタグ) を取る場合には最 小量指定子が役に立つでしょう. 大林一平 (KMC/Dept. Math., Kyoto U./JST CREST) 中級正規表現 2013/08/17,24 21 / 21
Download now