rabbit-slide-znz-ruby200-regexp 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e5f4fcdccb9f4f9894e676cb2f5a74060343823a
4
+ data.tar.gz: bce3c50579c0af1e4b395a1052a2f2b8f74104ce
5
+ SHA512:
6
+ metadata.gz: 6b3ebf240806732f342cddc032c62789b0927d718d8fd3986eeb034a82bb13ecd09460e7db9d08af29031a3c88f46f62c8dea4a71e06e8e1f1afa85e3ec230ee
7
+ data.tar.gz: 5e488aee95b8b9476012f61bd9acb7b3776352324f4e349b229fbc798beb8b1d13c46f452f3755a7d619c945683f8719e1beeb6050be74a6aece23c612a56cad
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ ruby200-regexp.rab
data/README.rd ADDED
@@ -0,0 +1,24 @@
1
+ = Ruby 2.0.0 での正規表現の新機能
2
+
3
+ 2.0.0 は正規表現エンジンが Onigmo になって機能が増えていますが、あまり情報がなかったので、調べてわかった範囲の内容を発表しました。
4
+
5
+ == 作者向け
6
+
7
+ === 表示
8
+
9
+ rake
10
+
11
+ === 公開
12
+
13
+ rake publish
14
+
15
+ == 閲覧者向け
16
+
17
+ === インストール
18
+
19
+ gem install rabbit-slide--ruby200-regexp
20
+
21
+ === 表示
22
+
23
+ rabbit rabbit-slide--ruby200-regexp.gem
24
+
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ Rabbit::Task::Slide.new do |task|
6
+ # task.spec.files += Dir.glob("doc/**/*.*")
7
+ # task.spec.files -= Dir.glob("private/**/*.*")
8
+ # task.spec.add_runtime_dependency("YOUR THEME")
9
+ end
data/config.yaml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: ruby200-regexp
3
+ base_name: ruby200-regexp
4
+ tags:
5
+ - onigmo
6
+ - oniguruma
7
+ - regexp
8
+ - ruby
9
+ - ruby2.0
10
+ presentation_date: 2013/06/02
11
+ version: 1.0.0
12
+ licenses: []
13
+ slideshare_id: ruby200-regexp-22312556
14
+ speaker_deck_id:
15
+ ustream_id:
16
+ vimeo_id:
17
+ author:
18
+ markup_language: :rd
19
+ name: Kazuhiro NISHIYAMA
20
+ email: zn@mbf.nifty.com
21
+ rubygems_user: znz
22
+ slideshare_user: znzjp
23
+ speaker_deck_user:
@@ -0,0 +1,158 @@
1
+ = Regexp.new('2.0.0')
2
+ : subtitle
3
+ Ruby 2.0.0 での正規表現の新機能
4
+ : author
5
+ 西山和広
6
+ : institution
7
+ 日本Rubyの会
8
+ : theme
9
+ lightning-simple
10
+ : allotted-time
11
+ 5m
12
+ = Onigmo
13
+ * Onigmo (Oniguruma-mod)
14
+
15
+ * NEWS of Ruby 2.0.0 says following only:
16
+
17
+ * Merge Onigmo
18
+
19
+ https://github.com/k-takata/Onigmo
20
+ * Details are unknown
21
+
22
+ (('note:詳細不明'))
23
+
24
+ == Note
25
+ Ruby 2.0.0 で正規表現エンジンとして Onigmo がマージされましたが、
26
+ NEWS にはマージされたと書いてあるだけで、詳しいことが全くわかりません。
27
+
28
+ そこで、気になった新機能などについて調べてみた内容を発表します。
29
+ = New feature (1) \K
30
+ examples without /\K/
31
+ "foobar".sub(/(?<=foo)bar/, "") #=> "foo"
32
+ "foobar".sub(/(?<=fo*)bar/, "")
33
+ # SyntaxError: invalid pattern in look-behind: /(?<=fo*)bar/
34
+
35
+ examples with /\K/
36
+ "foobar".sub(/foo\Kbar/, "") #=> "foo"
37
+ "foobar".sub(/fo*\Kbar/, "") #=> "foo"
38
+ == Note
39
+ 最初に紹介するのは \K です。
40
+ 固定長なら戻り読み (look-behind) で同じことが出来ますが、
41
+ \K なら可変長も出来ます。
42
+ = New feature (1) \K
43
+ Treat the first non-blank character of the line.
44
+
45
+ examples with /\K/
46
+ gsub(/^ *\K(\d+)/) { $1.to_i+1 }
47
+
48
+ examples without /\K/
49
+ gsub(/^( *)(\d+)/) { "#{$1}#{$2.to_i+1}" }
50
+
51
+ == Note
52
+ 実用的な例として行頭の数値を増やすというものを書いてみました。
53
+
54
+ \K なしで似たようなことをしようとするとキャプチャしておいて
55
+ 戻すなどの工夫が必要になります。
56
+
57
+ = New feature (2) \R
58
+ * Linebreak
59
+
60
+ (('note:改行文字'))
61
+ * Unicode:
62
+ (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}])
63
+ * Not Unicode:
64
+ (?>\x0D\x0A|[\x0A-\x0D])
65
+ == Note
66
+ 次は改行にマッチする \R です。
67
+ CRLF でも CR のみでも LF のみでもマッチしたいときに便利そうです。
68
+
69
+ = New feature (3) \X
70
+ * eXtended grapheme cluster
71
+
72
+ (('note:拡張書記素クラスタ'))
73
+ * Unicode:
74
+ (?>\P{M}\p{M}*)
75
+ * Not Unicode:
76
+ (?m:.)
77
+ == Note
78
+ 次は「拡張書記素クラスタ」にマッチする \X です。
79
+ 「拡張書記素クラスタ」というのは、誤解を恐れずに簡単に言ってしまうなら、
80
+ 1文字に見える塊のことです。
81
+
82
+ = Extended grapheme cluster
83
+ * example:
84
+ "\u{304B 3099}"[/\X/].size #=> 2
85
+ * U+304B HIRAGANA LETTER KA
86
+ * U+3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
87
+ * see [UAX #29] for more detail
88
+
89
+ (('note:(Unicode標準附属書29)'))
90
+ == Note
91
+ 例えば、ひらがなの「か」と合成用濁点は、見た目は1文字に見えます。
92
+ こういう塊のことを extended grapheme cluster というそうです。
93
+
94
+ \X はこのような塊にマッチします。
95
+
96
+ = New feature (4)
97
+ * conditional expression:
98
+ (?(cond)yes)
99
+ (?(cond)yes|no)
100
+
101
+ * example:
102
+ " :f o o "[/:(['"])?(?(1)[\w\s]+\1|\w+)/]
103
+ #=> ":f"
104
+ ":'f o o'"[/:(['"])?(?(1)[\w\s]+\1|\w+)/]
105
+ #=> ":'f o o'"
106
+ == Note
107
+ 次の新機能は条件式です。
108
+
109
+ 例としてクォートありとなしのシンボルっぽいものに
110
+ マッチする正規表現をまとめるのに使ってみました。
111
+
112
+ = (?adu)
113
+ * character set option (character range option)
114
+
115
+ (('note:文字集合オプション (文字範囲オプション)'))
116
+
117
+ * d: Default (compatible with Ruby 1.9.3)
118
+ * a: ASCII
119
+ * u: Unicode
120
+
121
+ see doc/RE in Onigmo for more detail
122
+
123
+ == Note
124
+ 次は文字集合オプションです。
125
+
126
+ = (?adu)
127
+ examples:
128
+ "\u{3042}"[/\w/] #=> nil
129
+ "\u{3042}"[/(?a)\w/] #=> nil
130
+ "\u{3042}"[/(?d)\w/] #=> nil
131
+ "\u{3042}"[/(?u)\w/] #=> "あ"
132
+
133
+ /a\b/ =~ "a\u{3042}" #=> nil
134
+ /(?a)a\b/ =~ "a\u{3042}" #=> 0
135
+ /(?d)a\b/ =~ "a\u{3042}" #=> nil
136
+ /(?u)a\b/ =~ "a\u{3042}" #=> nil
137
+
138
+ == Note
139
+ 例としてはこんな感じで動作が変わります。
140
+
141
+ = (?adu)
142
+ * (?-a), (?-d), (?-u) do not found
143
+ * unlike (?-i), (?-m), (?-x)
144
+ == Note
145
+ ちなみに i,m,x と違って a,d,u はオフにすることは出来ません。
146
+
147
+ = Character Property
148
+ * support for Unicode blocks
149
+ * example:
150
+ /\p{InHiragana}/ =~ "\u3042" #=> 0
151
+ /\p{InCJKUnifiedIdeographs}/ =~ "\u3042" #=> nil
152
+ * see tool/enc-unicode.rb in Onigmo for more detail
153
+ == Note
154
+ Unicode ブロックのサポートが増えているようです。
155
+ プロパティのあたりは情報が少ないので、ぜひ使ってみて、
156
+ 便利だと思ったら、ブログなどに情報をまとめて広めてみてください。
157
+
158
+ = /\z/
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-znz-ruby200-regexp
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kazuhiro NISHIYAMA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: 2.0.0 は正規表現エンジンが Onigmo になって機能が増えていますが、あまり情報がなかったので、調べてわかった範囲の内容を発表しました。
28
+ email:
29
+ - zn@mbf.nifty.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .rabbit
35
+ - config.yaml
36
+ - Rakefile
37
+ - README.rd
38
+ - ruby200-regexp.rab
39
+ - pdf/ruby200-regexp-ruby200-regexp.pdf
40
+ homepage: http://slide.rabbit-shocker.org/authors/znz/ruby200-regexp/
41
+ licenses: []
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.0.2
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Ruby 2.0.0 での正規表現の新機能
63
+ test_files: []