正規表現の限界

@Shibuya Perl Mongers technical talk #16
         〜夏の正規表現祭り〜

Ryoma SHINYA (@sinya8282)

Ustream 録画

Perlな皆さん, こんにちは

新屋 良磨 (しんや りょうま) @sinya8282

I ♥ 正規表現

とりあえず複雑な正規表現が見たい!!

夏の正規表現祭りって, 皆で複雑な正規表現を見てニヤニヤするお祭りですよね\?less than a minute ago via Twitter for Mac Favorite Retweet Reply

今回の発表のテーマです! 複雑さに理解の限界, 正規表現の限界を感じてみましょう :-)

はじめに: 前提

正規表現の演算

正規表現って... 意外と単純?

その幻想をぶち殺す!!

"マッチしない"正規表現: 否定表現

否定の仕組み

"否定"の正規表現を生成する長い旅路

とある否定の正規表現 Ⅰ

/abc/の否定

/((a?|ab)|((([^a]|a[^b])|ab[^c])|abc.).*)/

追記:弾さんから, 「Perlの正規表現的にはキャプチャしない括弧を生成しないと, 元の表現と意味が変わっちゃってダメだよ!」とリアルタイムツッコミをうけてしまいました. 後続に正規表現が続く場合は全くそのとおりで, その場合は '()' でなく'(?:)'で括るべきですね.

とある否定の正規表現 Ⅱ

/abc|efg/の否定

/((((a?|e)|ab)|ef)|((((([^ae]|a[^b])|e[^f])|ab[^c])|ef[^g])|(abc|efg).).*)/

とある否定の正規表現 Ⅲ

/.*abc.*/の否定

/(([^a]*|[^a]*a(a|[^ab][^a]*a)*([^ab][^a]*)?)|[^a]*a(a|[^ab][^a]*a)*b((a|[^ac][^a]*a)(a|[^ab][^a]*a)*b)*(([^ac][^a]*)?|(a|[^ac][^a]*a)(a|[^ab][^a]*a)*([^ab][^a]*)?))/

とある否定の正規表現 Ⅳ

/.*a.{2}/の否定

こんなんなりました.

正規表現, 面白いですね

I ♡
否定表現

正規表現強えぇ!!

悲しいお知らせ...

正規表現の限界を超えた文法

正規表現の限界を超えたPCRE

結局正規表現で四則演算を認識するのは無理?

限界など!知らない!意味ない!

逆に聞こう, 無限に再帰などするのか?

再帰: LV0

再帰: LV1

再帰: LV2

再帰: LV5

再帰: LV n

ヒウィッヒヒー

正規表現, 本っっ当に面白いですねぇ

I ♡
再帰表現

本当はもっと色々話したい... 盛り上がりたい!

Any Questions?

資料