SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
正規表現 
s/徹底/簡易/g 入門
さくらば@ZARU 
株式会社ベーシック&株式会社フルセイル 
TwitterとQiita、やってます 
カレーと寿司とラーメンが好き 
プログラミングが好き 
どんな言語も好きだけど、JavaScriptが大好き 
娘、産まれて育ってます
正規表現勉強会
正規表現
書いてますか?
正規表現が 
書ければ 
なんでもできる!
名言
一つの問題に直面するとき、 
「そうだ。正規表現を使おう。」 
と考える人たちは、二つの問題に直面する。 
Jamie Zawinski 
“ 
”
例えば 
正規表現を避ける
正規表現の種類
色々あります。 
POSIX -> 標準規格 
PCRE -> Perl 
鬼車-> Ruby 
Re2 -> Google 
GNU Regex -> Unix
それぞれ微妙に違う!
/) 
///) 
/,.=゙''"/ 
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! 
/ / _,.-‐'~/⌒ ⌒\ 
/ ,i ,二ニ⊃( ●). (●)\ 
/ ノil゙フ::::::⌒(__人__)⌒::::: \ 
,イ「ト、,!,!| |r┬-| | 
/ iトヾヽ_/ィ"\ `ー'´ /
今回は、鬼車で。
デリミタ 
エスケープシーケンス 
/^hoge/[a-z]{1}$/ 
メタ文字
メタ文字
^ 行頭 
$ 行末 
A 行頭 
z 行末 
改行を含む
/^hoge$/ =~ "hogen" 
=> 0 
/Ahogez/ =~ "hogen" 
=> nil
. 
* 
+ 
? 
改行を除くすべての文字 
0回以上の繰り返し 
1回以上の繰り返し 
0または1回or最小マッチ
/a*b+c?/ =~ "b" 
=> 0 
/a*b+c?/ =~ "aabbc" 
=> 0 
/a*b+c?/ =~ "cc" 
=> nil
[ ] 
{ } 
( ) 
| 
文字の集合 
量指定子 
グループ 
または
[a-z] aからz 
[a-zA-Z] aからz + AからZ 
[0-9] 0から9 
[ac] aとc 
[^ac] aとcを含まない 
(abc) abc文字列 
(ab|cd) abもしくはcd
{n, m} n回以上、m回以下 
{n, } n回以上 
{n} n回
最小マッチ 
"aaaa".scan(/a+?/) 
=> ["a", "a", "a", "a"] 
"aaaa".scan(/a+/) 
=> ["aaaa"]
/i 
/m 
/u 
オプション 
大文字小文字区別しない 
.が改行にもマッチ 
文字コードUTF-8
/abc/i =~ "ABC" 
=> 0 
"abnc".scan(/.+/) 
=> ["ab", "c"] 
"abnc".scan(/.+/m) 
=> ["abnc"]
先読み・後読み
肯定的先読み(?=pattern) 
否定的先読み(?!pattern) 
肯定的後読み(?<=pattern) 
否定的後読み(?<!pattern)
"foobar".scan(/foo(?=bar)/) 
=> ["foo"] 
"foobar".scan(/foo(?!bar)/) 
=> [] 
"foobar".scan(/(?<=foo)bar/) 
=> ["bar"] 
"foobar".scan(/(?<!foo)bar/) 
=> []
何に使うん?
abcで始まらない 
任意の文字列を 
マッチさせたい。
abcで始まる 
"abchoge".scan(/^abc.*/) 
=> [["abc"]]
abcで始まらない! 
"abchogenpiyo".scan(/^(abc).*/) 
=> ["piyo"]
まぁ、プログラム上で使うなら 
コードで否定すれば良いだけ。
よく使うパターン
王道:メールアドレス
function validate_email($email, $strict = true) { 
$dot_string = $strict ? 
'(?:[A-Za-z0-9!#$%&*+=?^_`{|}~'/-]|(?<!.|A).(?!.|@))' : 
'(?:[A-Za-z0-9!#$%&*+=?^_`{|}~'/.-])' 
; 
$quoted_string = '(?:|"|?[A-Za-z0-9!#$%&*+=?^_`{|}~()<>[]:;@,. '/-])'; 
$ipv4_part = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'; 
$ipv6_part = '(?:[A-fa-f0-9]{1,4})'; 
$fqdn_part = '(?:[A-Za-z](?:[A-Za-z0-9-]{0,61}?[A-Za-z0-9])?)'; 
$ipv4 = "(?:(?:{$ipv4_part}.){3}{$ipv4_part})"; 
$ipv6 = '(?:' . 
"(?:(?:{$ipv6_part}:){7}(?:{$ipv6_part}|:))" . '|' . 
"(?:(?:{$ipv6_part}:){6}(?::{$ipv6_part}|:{$ipv4}|:))" . '|' . 
"(?:(?:{$ipv6_part}:){5}(?:(?::{$ipv6_part}){1,2}|:{$ipv4}|:))" . '|' . 
"(?:(?:{$ipv6_part}:){4}(?:(?::{$ipv6_part}){1,3}|(?::{$ipv6_part})?:{$ipv4}|:))" . '|' . 
"(?:(?:{$ipv6_part}:){3}(?:(?::{$ipv6_part}){1,4}|(?::{$ipv6_part}){0,2}:{$ipv4}|:))" . '|' . 
"(?:(?:{$ipv6_part}:){2}(?:(?::{$ipv6_part}){1,5}|(?::{$ipv6_part}){0,3}:{$ipv4}|:))" . '|' . 
"(?:(?:{$ipv6_part}:){1}(?:(?::{$ipv6_part}){1,6}|(?::{$ipv6_part}){0,4}:{$ipv4}|:))" . '|' . 
"(?::(?:(?::{$ipv6_part}){1,7}|(?::{$ipv6_part}){0,5}:{$ipv4}|:))" . 
')'; 
$fqdn = "(?:(?:{$fqdn_part}.)+?{$fqdn_part})"; 
$local = "({$dot_string}++|("){$quoted_string}++")"; 
$domain = "({$fqdn}|[{$ipv4}]|[{$ipv6}]|[{$fqdn}])"; 
$pattern = "/A{$local}@{$domain}z/"; 
return preg_match($pattern, $email, $matches) && 
( 
!empty($matches[2]) && !isset($matches[1][66]) && !isset($matches[0][256]) || 
!isset($matches[1][64]) && !isset($matches[0][254]) 
) 
; 
} 
参照:http://qiita.com/mpyw/items/257eabe0b43b1e02e6f7
____ 
/:::::::::: u\ 
/:::::::::⌒ 三. ⌒\ 
/:::::::::: ( ○)三(○)\ 
|::::::::::::::::⌒(__人__)⌒ | _________ 
\:::::::::: ` ⌒´ ,/. | | | 
ノ::::::::::u \ | | | 
. /:::::::::::::::: u | | | 
|::::::::::::: l u | | | 
ヽ::::::: -一ー_~、⌒)^),-、|_|_______| 
ヽ::::::::___,ノγ⌒ヽ)二二二| | |
RFC5321/5322 
Abc@example.com 
Abc.123@example.com 
user+mailbox/department=shipping@example.com 
!#$%&'*+-/=?^_`.{|}~@example.com 
"Abc@def"@example.com 
"Fred Bloggs"@example.com 
"Joe.Blow"@example.com 
参照:http://ja.wikipedia.org/wiki/メールアドレス
HTML5 
input[type=email] 
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9] 
(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? 
(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ 
参照:http://www.w3.org/TR/html5/forms.html#valid-e-mail-address
郵便番号 
"123-4567".scan(/([d]{3})-([d]{4})/) 
"123-4567".scan(/([0-9]{3})-([0-9]{4})/) 
=> [["123", "4567"]]
HTMLタグの中身 
"<p>hoge</p><p>piyo</p>".scan(/<p>(.+?)</p>/) 
=> [["hoge"], ["piyo"]]
HTTP URI 
"http://hoge.com/piyo" =~ %r{https?:(//(([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=])*@)?([(([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0- 
4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0- 
9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|([0- 
9a-f]{1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0- 
4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0- 
4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,2}[0-9a-f]{ 
1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0- 
5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0- 
5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{ 
1,4}:[0-9a-f]{1,4}|(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0- 
4]d|25[0-5]))|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::|v[0-9a-f]+.[!$&-.0-;=_a-z~]+)]|(d|[1-9]d|1d{2}|2[0- 
4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5]).(d|[1-9]d|1d{2}|2[0-4]d|25[0-5])|([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&- 
,;=])*)(:d*)?(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])*)*|/(([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])+(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&- 
,:;=@])*)*)?|([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])+(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])*)*)?(?([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&- 
,/:;=?@])*)?(#([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,/:;=?@])*)?}
____ 
/ \ 
/:::::::─三三─\ 
/::::::::: ( ○)三(○)\ 
| 、" ゙)(__人__)ル゚。゚___________ 
\ ゝ'゚≦ 三゚| | | 
__/ 。≧ 三= | | | 
| | / , -ァ, ≧= .| | | 
| | / / .イレ,、> | | | 
| | | ⌒ ーnnn ,≦`Vヾヾ≧ |_|___________| 
 ̄\__、("二)。゚/。・イハ、\、l二二l二二_|_|__|_
HTTP URI 
"http://hoge.com/" =~ 
%r{(?:http|https)://[^s<u00A0"]+}ix 
=> 0
…色んなパターン紹介しようと思ったけど
正規表現で 
FizzBuzz
for (1..100) { 
s/(?<=[05])$/Buzz/; 
s/^([0369]|[147]([0369]|[147][0369]*[258])* 
([258]|[147][0369]*[147])| 
[258]([0369]|[258][0369]*[147])* 
([147]|[258][0369]*[258]))+Buzz$/FizzBuzz/; 
s/^([0369]|[147]([0369]|[147][0369]*[258])* 
([258]|[147][0369]*[147])| 
[258]([0369]|[258][0369]*[147])* 
([147]|[258][0369]*[258]))+$/Fizz/; 
s/d+(?=D)//; 
print "$_n"; 
}
for (1..100) { 
s/(?<=[05])$/Buzz/; 
s/^([0369]|[147]([0369]|[147][0369]*[258])* 
([258]|[147][0369]*[147])| 
[258]([0369]|[258][0369]*[147])* 
([147]|[258][0369]*[258]))+Buzz$/FizzBuzz/; 
s/^([0369]|[147]([0369]|[147][0369]*[258])* 
([258]|[147][0369]*[147])| 
[258]([0369]|[258][0369]*[147])* 
([147]|[258][0369]*[258]))+$/Fizz/; 
s/d+(?=D)//; 
print "$_n"; 
} 
5の倍数の時、Buzzを追加 
Buzzがあって、 
かつ3の倍数の時残ったFizzBuzz 3の倍数をFizzに 
最後に必要ない数値を削除
まとめ
正規表現は強力 
なので、複雑なケースを避ける 
(バリデーションで頑張り過ぎない) 
sedやgrepなどプログラミング以外で 
活用したほうが良い。
$ shutdown -h now

Contenu connexe

En vedette

初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編shinta rock
 
少し未来のコードレビュー
少し未来のコードレビュー少し未来のコードレビュー
少し未来のコードレビューzaru sakuraba
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへTomohiro Yamasaki
 
WEBページを表示するまで
WEBページを表示するまでWEBページを表示するまで
WEBページを表示するまでShoichi Kakizaki
 
アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話shinta rock
 
非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1Karino Kyohei
 
エンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザインエンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザインshinta rock
 
スマホフロントエンド最速化手法
スマホフロントエンド最速化手法スマホフロントエンド最速化手法
スマホフロントエンド最速化手法zaru sakuraba
 
ほんわかSwift勉強資料
ほんわかSwift勉強資料ほんわかSwift勉強資料
ほんわかSwift勉強資料kouhei kawamata
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_uxSaori Matsui
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版MOCKS | Yuta Morishige
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識Tsutomu Sogitani
 
どうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのかどうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのかMasahito Zembutsu
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】MOCKS | Yuta Morishige
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座Mariko Yamaguchi
 
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘swwwitch inc.
 
魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 schoowebcampus
 

En vedette (20)

初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編初心者のためのキャラクターの描き方のコツ 入門編
初心者のためのキャラクターの描き方のコツ 入門編
 
少し未来のコードレビュー
少し未来のコードレビュー少し未来のコードレビュー
少し未来のコードレビュー
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
 
WEBページを表示するまで
WEBページを表示するまでWEBページを表示するまで
WEBページを表示するまで
 
ワクワク電子工作
ワクワク電子工作ワクワク電子工作
ワクワク電子工作
 
アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話アプリデザインのお勉強 UI/UXのお話
アプリデザインのお勉強 UI/UXのお話
 
非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1非エンジニア向けHTML勉強会その1
非エンジニア向けHTML勉強会その1
 
エンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザインエンジニアでもできる⁉︎それっぽいデザイン
エンジニアでもできる⁉︎それっぽいデザイン
 
スマホフロントエンド最速化手法
スマホフロントエンド最速化手法スマホフロントエンド最速化手法
スマホフロントエンド最速化手法
 
ほんわかSwift勉強資料
ほんわかSwift勉強資料ほんわかSwift勉強資料
ほんわかSwift勉強資料
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_ux
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
 
どうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのかどうしてプレゼン研究会を始めたのか
どうしてプレゼン研究会を始めたのか
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
 
社内勉強会を継続成長させる方法
社内勉強会を継続成長させる方法社内勉強会を継続成長させる方法
社内勉強会を継続成長させる方法
 
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
SINAP TALK Vol.04「プレゼンテーションについて」鷹野雅弘
 
魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 
 

Similaire à 正規表現勉強会

YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXKazuyuki Todo
 
CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?Hayato Mizuno
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るMasashi Shinbara
 
JavaScriptの正規表現
JavaScriptの正規表現JavaScriptの正規表現
JavaScriptの正規表現yaju88
 
20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話outerinside
 
Gaucheでマクロを書こう
Gaucheでマクロを書こうGaucheでマクロを書こう
Gaucheでマクロを書こうHideaki Nagamine
 
Tfpモデリングスペキュレーション
TfpモデリングスペキュレーションTfpモデリングスペキュレーション
TfpモデリングスペキュレーションEiichi Hayashi
 
拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化Kazunori Jo
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門Ishibashi Ryosuke
 

Similaire à 正規表現勉強会 (10)

YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
 
CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
 
JavaScriptの正規表現
JavaScriptの正規表現JavaScriptの正規表現
JavaScriptの正規表現
 
Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
 
20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話
 
Gaucheでマクロを書こう
Gaucheでマクロを書こうGaucheでマクロを書こう
Gaucheでマクロを書こう
 
Tfpモデリングスペキュレーション
TfpモデリングスペキュレーションTfpモデリングスペキュレーション
Tfpモデリングスペキュレーション
 
拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門
 

Plus de zaru sakuraba

WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有zaru sakuraba
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門zaru sakuraba
 
CarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスCarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスzaru sakuraba
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見zaru sakuraba
 
スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?zaru sakuraba
 
GitHub Appsの作り方
GitHub Appsの作り方GitHub Appsの作り方
GitHub Appsの作り方zaru sakuraba
 
Railsモデル設計ケーススタディ
Railsモデル設計ケーススタディRailsモデル設計ケーススタディ
Railsモデル設計ケーススタディzaru sakuraba
 
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門zaru sakuraba
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知zaru sakuraba
 
良いプログラマーとは
良いプログラマーとは良いプログラマーとは
良いプログラマーとはzaru sakuraba
 

Plus de zaru sakuraba (11)

WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
 
CarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスCarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラス
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?
 
GitHub Appsの作り方
GitHub Appsの作り方GitHub Appsの作り方
GitHub Appsの作り方
 
Railsモデル設計ケーススタディ
Railsモデル設計ケーススタディRailsモデル設計ケーススタディ
Railsモデル設計ケーススタディ
 
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
 
良いプログラマーとは
良いプログラマーとは良いプログラマーとは
良いプログラマーとは
 

正規表現勉強会