rabbit-slide-znz-ruby200-regexp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.rd +24 -0
- data/Rakefile +9 -0
- data/config.yaml +23 -0
- data/pdf/ruby200-regexp-ruby200-regexp.pdf +0 -0
- data/ruby200-regexp.rab +158 -0
- metadata +63 -0
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:
|
Binary file
|
data/ruby200-regexp.rab
ADDED
@@ -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: []
|