regexp-examples 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -13
  3. data/coverage/.gitignore +4 -0
  4. data/coverage/coverage-badge.png +0 -0
  5. data/lib/regexp-examples.rb +1 -1
  6. data/lib/regexp-examples/core_extensions/regexp/examples.rb +16 -0
  7. data/lib/regexp-examples/parser.rb +23 -11
  8. data/lib/regexp-examples/version.rb +1 -1
  9. data/spec/regexp-examples_spec.rb +2 -0
  10. metadata +5 -32
  11. data/coverage/.last_run.json +0 -5
  12. data/coverage/.resultset.json +0 -906
  13. data/coverage/.resultset.json.lock +0 -0
  14. data/coverage/assets/0.8.0/application.css +0 -799
  15. data/coverage/assets/0.8.0/application.js +0 -1559
  16. data/coverage/assets/0.8.0/colorbox/border.png +0 -0
  17. data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  18. data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  19. data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  20. data/coverage/assets/0.8.0/favicon_green.png +0 -0
  21. data/coverage/assets/0.8.0/favicon_red.png +0 -0
  22. data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  23. data/coverage/assets/0.8.0/loading.gif +0 -0
  24. data/coverage/assets/0.8.0/magnify.png +0 -0
  25. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  26. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  27. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  28. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  29. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  30. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  31. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  32. data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  33. data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  34. data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  35. data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  36. data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  37. data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  38. data/coverage/index.html +0 -5626
  39. data/lib/regexp-examples/regexp_extensions.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9df53956931ca38a9bdcd9f7da1318a80922bfee
4
- data.tar.gz: f884ae6fe38349486eb86f15ffb63eca6febb5ef
3
+ metadata.gz: e6b6bd1d3602690963b1f1ecb61dbb91b38d0847
4
+ data.tar.gz: c104bcd97175689467336fa4c11f4f187d483332
5
5
  SHA512:
6
- metadata.gz: 5ec27e327cc331647dcfabe9f9d9028b96fd43051e3e56dae9d9b200683cbd704c62af78faff19740e7cecd008d47946e7dfc4871c480a24985eae857831dbe9
7
- data.tar.gz: 8e999b7e0d41191d6cc0b3bfbf7069294a1faedb053468c8cf714f0310e2b06f2d7f65b678387d3020c64525a41d98d3e5444628bc3e0cf44ddab779b2763f64
6
+ metadata.gz: 75662efea94170727d89f7f88335a02ab688cbe37a587a01d1c08b72ab69e64ff3bdc0ff2faef91ebb9622b0f465b67843620d3219639cc41156800f59d8ed22
7
+ data.tar.gz: 85b54784013793a0a192cf2b456eb48fab304be07c87149726f3379a7409ae2a3f3fdc66c592b526d6c634d4a2bea0a53b60c0ea226fd295191549a6e8f67f2c
data/README.md CHANGED
@@ -9,7 +9,8 @@ This method generates a list of (some\*) strings that will match the given regul
9
9
 
10
10
  \* If the regex has an infinite number of possible srings that match it, such as `/a*b+c{2,}/`,
11
11
  or a huge number of possible matches, such as `/.\w/`, then only a subset of these will be listed.
12
- For more detail on this, see [configuration options](#configuration_options).
12
+
13
+ For more detail on this, see [configuration options](#configuration-options).
13
14
 
14
15
  ## Usage
15
16
 
@@ -41,9 +42,29 @@ For more detail on this, see [configuration options](#configuration_options).
41
42
  * Unicode characters, e.g. `/\u0123/`, `/\uabcd/`, `/\u{789}/`
42
43
  * **Arbitrarily complex combinations of all the above!**
43
44
 
44
- ## Not-Yet-Supported syntax
45
+ ## Bugs and Not-Yet-Supported syntax
46
+
47
+ * Backreferences are replaced by the _first_ occurance of the group, not the _last_ (as it should be). This is quite a rare occurance, but for example:
48
+ * `/(a|b){2} \1/.examples` incorrectly includes: `"ba b"` rather than the correct: `"ba a"`
49
+
50
+ * Options, e.g. `/pattern/i`, `/foo.*bar/m` - Using options will currently just be ignored, for example:
51
+ * `/test/i.examples` will NOT include `"TEST"`
52
+ * `/white space/x.examples` will not strip out the whitespace from the pattern, i.e. this incorrectly returns `["white space"]` rather than `["whitespace"]`
53
+
54
+ * Nested character classes, and the use of set intersection ([See here](http://www.ruby-doc.org/core-2.2.0/Regexp.html#class-Regexp-label-Character+Classes) for the official documentation on this.) For example:
55
+ * `/[[abc]]/.examples` (which _should_ return `["a", "b", "c"]`)
56
+ * `/[[a-d]&&[c-f]]/.examples` (which _should_ return: `["c", "d"]`)
57
+
58
+ * Extended groups are not yet supported, such as:
59
+ * Including comments inside the pattern, i.e. `/(?#...)/`
60
+ * Conditional capture groups, such as `/(group1) (?(1)yes|no)`
61
+ * Options toggling, i.e. `/(?imx)/`, `/(?-imx)/`, `/(?imx: re)/` and `/(?-imx: re)/`
62
+
63
+ * Possessive quantifiers, i.e. `/.?+/`, `/.*+/`, `/.++/`
45
64
 
46
- * Options, e.g. `/pattern/i`, `/foo.*bar/m` - Using options will currently just be ignored, e.g. `/test/i.examples` will NOT include `"TEST"`
65
+ * The patterns: `/\10/` ... `/\77/` should match the octal representation of their character code, if there is no nth grouped subexpression. For example, `/\10/.examples` should return `["\x08"]`. Funnily enough, I did not think of this when writing my regexp parser.
66
+
67
+ Full documentation on all the various other obscurities in the ruby (version 2.x) regexp parser can be found [here](https://raw.githubusercontent.com/k-takata/Onigmo/master/doc/RE).
47
68
 
48
69
  Using any of the following will raise a RegexpExamples::UnsupportedSyntax exception (until such time as they are implemented!):
49
70
 
@@ -64,7 +85,6 @@ Using any of the following will raise a RegexpExamples::IllegalSyntax exception:
64
85
 
65
86
  (Note: Backreferences are not really "regular" either, but I got these to work with a bit of hackery!)
66
87
 
67
- <a name="configuration_options"/>
68
88
  ##Configuration Options
69
89
 
70
90
  When generating examples, the gem uses 2 configurable values to limit how many examples are listed:
@@ -89,7 +109,7 @@ To use an alternative value, simply pass the configuration option as follows:
89
109
  /[F-X]/.examples(max_group_results: 10) #=> ['F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']
90
110
  ```
91
111
 
92
- **_WARNING_**: Choosing huge numbers, along with a "complex" regex, could easily cause your system to freeze!
112
+ _**WARNING**: Choosing huge numbers, along with a "complex" regex, could easily cause your system to freeze!_
93
113
 
94
114
  For example, if you try to generate a list of _all_ 5-letter words: `/\w{5}/.examples(max_group_results: 999)`, then since there are actually `63` "word" characters (upper/lower case letters, numbers and "\_"), this will try to generate `63**5 #=> 992436543` (almost 1 _trillion_) examples!
95
115
 
@@ -101,14 +121,6 @@ A more sensible use case might be, for example, to generate one random 1-4 digit
101
121
 
102
122
  (Note: I may develop a much more efficient way to "generate one example" in a later release of this gem.)
103
123
 
104
- ## Known Bugs
105
-
106
- There are a few obscure bugs that have yet to be resolved:
107
-
108
- * Various (weird!) legal patterns do not get parsed correctly, such as `/[[wtf]]/.examples` - To solve this, I'll probably have to dig deep into the Ruby source code and imitate the actual Regex parser more closely.
109
-
110
- * Backreferences are replaced by the _first_ occurance of the group, not the _last_ (as it should be). This is quite a rare occurance, but for example: `/(a|b){2} \1/.examples` incorrectly includes: `"ba b"` rather than the correct: `"ba a"`
111
-
112
124
  ## Installation
113
125
 
114
126
  Add this line to your application's Gemfile:
@@ -0,0 +1,4 @@
1
+ # Ignore any file in this directory except for this file and coverage-badge.png files
2
+ *
3
+ !/.gitignore
4
+ !coverage-badge.png
Binary file
@@ -1,2 +1,2 @@
1
- Dir[File.dirname(__FILE__) + '/regexp-examples/*.rb'].each {|file| require file }
1
+ Dir[File.dirname(__FILE__) + '/regexp-examples/**/*.rb'].each {|file| require file }
2
2
 
@@ -0,0 +1,16 @@
1
+ module CoreExtensions
2
+ module Regexp
3
+ module Examples
4
+ def examples(options={})
5
+ full_examples = RegexpExamples.map_results(
6
+ RegexpExamples::Parser.new(source, options).parse
7
+ )
8
+ RegexpExamples::BackReferenceReplacer.new.substitute_backreferences(full_examples)
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ # Regexp#include is private for ruby 2.0 and below
15
+ Regexp.send(:include, CoreExtensions::Regexp::Examples)
16
+
@@ -28,8 +28,7 @@ module RegexpExamples
28
28
  private
29
29
 
30
30
  def parse_group(repeaters)
31
- char = regexp_string[@current_position]
32
- case char
31
+ case next_char
33
32
  when '('
34
33
  group = parse_multi_group
35
34
  when ')'
@@ -55,7 +54,7 @@ module RegexpExamples
55
54
  raise IllegalSyntaxError, "Anchors cannot be supported, as they are not regular"
56
55
  end
57
56
  else
58
- group = parse_single_char_group(char)
57
+ group = parse_single_char_group(next_char)
59
58
  end
60
59
  group
61
60
  end
@@ -69,11 +68,11 @@ module RegexpExamples
69
68
  when rest_of_string =~ /\Ak<([^>]+)>/ # Named capture group
70
69
  @current_position += ($1.length + 2)
71
70
  group = parse_backreference_group($1)
72
- when BackslashCharMap.keys.include?(regexp_string[@current_position])
71
+ when BackslashCharMap.keys.include?(next_char)
73
72
  group = CharGroup.new(
74
73
  # Note: The `.dup` is important, as it prevents modifying the constant, in
75
74
  # CharGroup#init_ranges (where the '-' is moved to the front)
76
- BackslashCharMap[regexp_string[@current_position]].dup
75
+ BackslashCharMap[next_char].dup
77
76
  )
78
77
  when rest_of_string =~ /\A(c|C-)(.)/ # Control character
79
78
  @current_position += $1.length
@@ -106,14 +105,13 @@ module RegexpExamples
106
105
  raise IllegalSyntaxError, "Anchors cannot be supported, as they are not regular"
107
106
  end
108
107
  else
109
- group = parse_single_char_group( regexp_string[@current_position] )
108
+ group = parse_single_char_group( next_char )
110
109
  end
111
110
  group
112
111
  end
113
112
 
114
113
  def parse_repeater(group)
115
- char = regexp_string[@current_position]
116
- case char
114
+ case next_char
117
115
  when '*'
118
116
  repeater = parse_star_repeater(group)
119
117
  when '+'
@@ -162,19 +160,19 @@ module RegexpExamples
162
160
  end
163
161
  chars = []
164
162
  @current_position += 1
165
- if regexp_string[@current_position] == ']'
163
+ if next_char == ']'
166
164
  # Beware of the sneaky edge case:
167
165
  # /[]]/ (match "]")
168
166
  chars << ']'
169
167
  @current_position += 1
170
168
  end
171
- until regexp_string[@current_position] == ']' \
169
+ until next_char == ']' \
172
170
  && !regexp_string[0..@current_position-1].match(/[^\\](\\{2})*\\\z/)
173
171
  # Beware of having an ODD number of "\" before the "]", e.g.
174
172
  # /[\]]/ (match "]")
175
173
  # /[\\]/ (match "\")
176
174
  # /[\\\]]/ (match "\" or "]")
177
- chars << regexp_string[@current_position]
175
+ chars << next_char
178
176
  @current_position += 1
179
177
  end
180
178
  CharGroup.new(chars)
@@ -214,14 +212,24 @@ module RegexpExamples
214
212
 
215
213
  def parse_star_repeater(group)
216
214
  @current_position += 1
215
+ parse_non_greedy_repeater
217
216
  StarRepeater.new(group)
218
217
  end
219
218
 
220
219
  def parse_plus_repeater(group)
221
220
  @current_position += 1
221
+ parse_non_greedy_repeater
222
222
  PlusRepeater.new(group)
223
223
  end
224
224
 
225
+ def parse_non_greedy_repeater
226
+ if next_char == '?'
227
+ # TODO: Delay this warning until after parsing, and only display if capture groups are used
228
+ warn "Warning: Non-greedy operators (*? and +?) might not work properly, when using capture groups"
229
+ @current_position += 1
230
+ end
231
+ end
232
+
225
233
  def parse_question_mark_repeater(group)
226
234
  @current_position += 1
227
235
  QuestionMarkRepeater.new(group)
@@ -243,6 +251,10 @@ module RegexpExamples
243
251
  def rest_of_string
244
252
  regexp_string[@current_position..-1]
245
253
  end
254
+
255
+ def next_char
256
+ regexp_string[@current_position]
257
+ end
246
258
  end
247
259
  end
248
260
 
@@ -1,3 +1,3 @@
1
1
  module RegexpExamples
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
@@ -42,7 +42,9 @@ RSpec.describe Regexp, "#examples" do
42
42
  examples_exist_and_match(
43
43
  /a/,
44
44
  /a*/,
45
+ /a*?/,
45
46
  /a+/,
47
+ /a+?/,
46
48
  /a?/,
47
49
  /a{1}/,
48
50
  /a{1,}/,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: regexp-examples
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Lord
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-25 00:00:00.000000000 Z
11
+ date: 2015-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -51,43 +51,16 @@ files:
51
51
  - LICENSE.txt
52
52
  - README.md
53
53
  - Rakefile
54
- - coverage/.last_run.json
55
- - coverage/.resultset.json
56
- - coverage/.resultset.json.lock
57
- - coverage/assets/0.8.0/application.css
58
- - coverage/assets/0.8.0/application.js
59
- - coverage/assets/0.8.0/colorbox/border.png
60
- - coverage/assets/0.8.0/colorbox/controls.png
61
- - coverage/assets/0.8.0/colorbox/loading.gif
62
- - coverage/assets/0.8.0/colorbox/loading_background.png
63
- - coverage/assets/0.8.0/favicon_green.png
64
- - coverage/assets/0.8.0/favicon_red.png
65
- - coverage/assets/0.8.0/favicon_yellow.png
66
- - coverage/assets/0.8.0/loading.gif
67
- - coverage/assets/0.8.0/magnify.png
68
- - coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
69
- - coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
70
- - coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
71
- - coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
72
- - coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png
73
- - coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
74
- - coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
75
- - coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
76
- - coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png
77
- - coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png
78
- - coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png
79
- - coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png
80
- - coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png
54
+ - coverage/.gitignore
81
55
  - coverage/coverage-badge.png
82
- - coverage/index.html
83
56
  - lib/regexp-examples.rb
84
57
  - lib/regexp-examples/backreferences.rb
85
58
  - lib/regexp-examples/constants.rb
59
+ - lib/regexp-examples/core_extensions/regexp/examples.rb
86
60
  - lib/regexp-examples/exceptions.rb
87
61
  - lib/regexp-examples/groups.rb
88
62
  - lib/regexp-examples/helpers.rb
89
63
  - lib/regexp-examples/parser.rb
90
- - lib/regexp-examples/regexp_extensions.rb
91
64
  - lib/regexp-examples/repeaters.rb
92
65
  - lib/regexp-examples/version.rb
93
66
  - regexp-examples.gemspec
@@ -113,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
86
  version: '0'
114
87
  requirements: []
115
88
  rubyforge_project:
116
- rubygems_version: 2.4.5
89
+ rubygems_version: 2.2.2
117
90
  signing_key:
118
91
  specification_version: 4
119
92
  summary: Extends the Regexp class with '#examples'
@@ -1,5 +0,0 @@
1
- {
2
- "result": {
3
- "covered_percent": 100.0
4
- }
5
- }
@@ -1,906 +0,0 @@
1
- {
2
- "RSpec": {
3
- "coverage": {
4
- "/home/tom/git/regexp-examples/lib/regexp-examples.rb": [
5
- 10,
6
- null
7
- ],
8
- "/home/tom/git/regexp-examples/lib/regexp-examples/helpers.rb": [
9
- 1,
10
- null,
11
- null,
12
- null,
13
- null,
14
- null,
15
- null,
16
- null,
17
- null,
18
- 1,
19
- 813,
20
- 813,
21
- 256,
22
- 350,
23
- null,
24
- null,
25
- null,
26
- 1,
27
- 350,
28
- 350,
29
- null,
30
- null,
31
- 350,
32
- null,
33
- null,
34
- 1,
35
- null,
36
- 220,
37
- 117,
38
- 117,
39
- null,
40
- null,
41
- null,
42
- null
43
- ],
44
- "/home/tom/git/regexp-examples/lib/regexp-examples/repeaters.rb": [
45
- 1,
46
- 1,
47
- 1,
48
- 1,
49
- 410,
50
- null,
51
- null,
52
- 1,
53
- 369,
54
- 369,
55
- 369,
56
- 414,
57
- 19,
58
- null,
59
- null,
60
- null,
61
- 395,
62
- null,
63
- null,
64
- 369,
65
- null,
66
- null,
67
- null,
68
- 1,
69
- 1,
70
- 376,
71
- null,
72
- null,
73
- 1,
74
- 335,
75
- null,
76
- null,
77
- null,
78
- 1,
79
- 1,
80
- 5,
81
- null,
82
- null,
83
- 1,
84
- 5,
85
- null,
86
- null,
87
- null,
88
- 1,
89
- 1,
90
- 7,
91
- null,
92
- null,
93
- 1,
94
- 7,
95
- null,
96
- null,
97
- null,
98
- 1,
99
- 1,
100
- 13,
101
- null,
102
- null,
103
- 1,
104
- 13,
105
- null,
106
- null,
107
- null,
108
- 1,
109
- 1,
110
- 9,
111
- 9,
112
- 9,
113
- null,
114
- 3,
115
- 6,
116
- 1,
117
- null,
118
- 5,
119
- null,
120
- null,
121
- null,
122
- 1,
123
- 9,
124
- null,
125
- null,
126
- 1,
127
- 1,
128
- 3,
129
- null,
130
- null,
131
- null,
132
- null
133
- ],
134
- "/home/tom/git/regexp-examples/lib/regexp-examples/backreferences.rb": [
135
- 1,
136
- 1,
137
- 1,
138
- null,
139
- 215,
140
- 215,
141
- 32,
142
- null,
143
- 213,
144
- null,
145
- null,
146
- null,
147
- 2,
148
- null,
149
- 95,
150
- null,
151
- null,
152
- 1,
153
- 1,
154
- null,
155
- 80,
156
- 32,
157
- null,
158
- null,
159
- null,
160
- null,
161
- null
162
- ],
163
- "/home/tom/git/regexp-examples/lib/regexp-examples/exceptions.rb": [
164
- 1,
165
- 1,
166
- 1,
167
- 1,
168
- 1,
169
- null
170
- ],
171
- "/home/tom/git/regexp-examples/lib/regexp-examples/constants.rb": [
172
- 1,
173
- 1,
174
- null,
175
- null,
176
- null,
177
- null,
178
- null,
179
- null,
180
- null,
181
- 1,
182
- null,
183
- null,
184
- null,
185
- null,
186
- null,
187
- 1,
188
- null,
189
- 1,
190
- 1,
191
- 1,
192
- 112,
193
- 112,
194
- null,
195
- null,
196
- null,
197
- null,
198
- 1,
199
- 16,
200
- null,
201
- 1,
202
- 369,
203
- null,
204
- null,
205
- 1,
206
- 1,
207
- 1,
208
- 1,
209
- 37,
210
- 1,
211
- 1,
212
- 1,
213
- null,
214
- null,
215
- null,
216
- 1,
217
- null,
218
- null,
219
- null,
220
- 32,
221
- null,
222
- null,
223
- null,
224
- null,
225
- null,
226
- null,
227
- null,
228
- null,
229
- null,
230
- null,
231
- null,
232
- null,
233
- null,
234
- null,
235
- null
236
- ],
237
- "/home/tom/git/regexp-examples/lib/regexp-examples/parser.rb": [
238
- 1,
239
- 1,
240
- 1,
241
- 1,
242
- 112,
243
- 112,
244
- 112,
245
- 112,
246
- null,
247
- null,
248
- null,
249
- null,
250
- null,
251
- 1,
252
- 169,
253
- 169,
254
- 473,
255
- 455,
256
- 410,
257
- 11,
258
- null,
259
- 399,
260
- 399,
261
- null,
262
- 140,
263
- null,
264
- null,
265
- 1,
266
- null,
267
- 1,
268
- 473,
269
- 473,
270
- null,
271
- 50,
272
- null,
273
- 45,
274
- null,
275
- 27,
276
- null,
277
- 4,
278
- null,
279
- 11,
280
- null,
281
- 66,
282
- null,
283
- 2,
284
- 1,
285
- null,
286
- 1,
287
- null,
288
- null,
289
- 2,
290
- 1,
291
- null,
292
- 1,
293
- null,
294
- null,
295
- 266,
296
- null,
297
- 455,
298
- null,
299
- null,
300
- 1,
301
- 66,
302
- null,
303
- null,
304
- 21,
305
- 21,
306
- null,
307
- 1,
308
- 1,
309
- null,
310
- 15,
311
- null,
312
- null,
313
- null,
314
- null,
315
- null,
316
- 8,
317
- 8,
318
- null,
319
- 3,
320
- 3,
321
- null,
322
- 3,
323
- 3,
324
- 3,
325
- null,
326
- 3,
327
- 3,
328
- null,
329
- null,
330
- 1,
331
- null,
332
- 3,
333
- null,
334
- 2,
335
- 1,
336
- null,
337
- 1,
338
- null,
339
- null,
340
- 4,
341
- 2,
342
- null,
343
- 2,
344
- null,
345
- null,
346
- 2,
347
- 66,
348
- 56,
349
- null,
350
- null,
351
- 1,
352
- 399,
353
- 399,
354
- null,
355
- 5,
356
- null,
357
- 7,
358
- null,
359
- 13,
360
- null,
361
- 9,
362
- null,
363
- 365,
364
- null,
365
- 399,
366
- null,
367
- null,
368
- 1,
369
- 50,
370
- 50,
371
- 50,
372
- 50,
373
- null,
374
- null,
375
- 42,
376
- null,
377
- 1,
378
- 1,
379
- null,
380
- 2,
381
- null,
382
- 2,
383
- null,
384
- 3,
385
- 3,
386
- 50,
387
- null,
388
- 46,
389
- 45,
390
- null,
391
- null,
392
- 1,
393
- 45,
394
- null,
395
- null,
396
- 1,
397
- 27,
398
- 1,
399
- null,
400
- 26,
401
- 26,
402
- 26,
403
- null,
404
- null,
405
- 1,
406
- 1,
407
- null,
408
- null,
409
- 26,
410
- null,
411
- null,
412
- null,
413
- null,
414
- 102,
415
- 102,
416
- null,
417
- 26,
418
- null,
419
- null,
420
- 1,
421
- 4,
422
- null,
423
- null,
424
- 1,
425
- 11,
426
- 11,
427
- 11,
428
- null,
429
- null,
430
- null,
431
- 1,
432
- 287,
433
- null,
434
- null,
435
- 1,
436
- 22,
437
- null,
438
- null,
439
- 1,
440
- 8,
441
- null,
442
- null,
443
- null,
444
- 1,
445
- 3,
446
- null,
447
- null,
448
- 1,
449
- 3,
450
- null,
451
- null,
452
- 1,
453
- 5,
454
- 5,
455
- null,
456
- null,
457
- 1,
458
- 7,
459
- 7,
460
- null,
461
- null,
462
- 1,
463
- 13,
464
- 13,
465
- null,
466
- null,
467
- 1,
468
- 9,
469
- 9,
470
- 9,
471
- 9,
472
- 9,
473
- 9,
474
- null,
475
- null,
476
- 1,
477
- 365,
478
- null,
479
- null,
480
- 1,
481
- 317,
482
- null,
483
- null,
484
- null,
485
- null
486
- ],
487
- "/home/tom/git/regexp-examples/lib/regexp-examples/groups.rb": [
488
- 1,
489
- null,
490
- null,
491
- null,
492
- 1,
493
- 1,
494
- 1,
495
- 1491,
496
- 1491,
497
- 1491,
498
- 155,
499
- null,
500
- 1491,
501
- null,
502
- null,
503
- 1,
504
- 2213,
505
- null,
506
- null,
507
- null,
508
- 1,
509
- 1,
510
- 287,
511
- null,
512
- 1,
513
- 249,
514
- null,
515
- null,
516
- null,
517
- 1,
518
- 1,
519
- 41,
520
- 41,
521
- 10,
522
- 10,
523
- null,
524
- 31,
525
- null,
526
- null,
527
- 41,
528
- 41,
529
- null,
530
- null,
531
- 1,
532
- null,
533
- 41,
534
- 41,
535
- 41,
536
- 41,
537
- null,
538
- 41,
539
- null,
540
- null,
541
- 25,
542
- 14,
543
- 14,
544
- null,
545
- 11,
546
- null,
547
- null,
548
- null,
549
- 41,
550
- 41,
551
- null,
552
- null,
553
- 1,
554
- 41,
555
- 1348,
556
- 30,
557
- 20,
558
- null,
559
- 1,
560
- null,
561
- 2,
562
- null,
563
- 7,
564
- null,
565
- null,
566
- null,
567
- null,
568
- null,
569
- 1,
570
- 41,
571
- 602,
572
- null,
573
- null,
574
- null,
575
- 1,
576
- 1,
577
- 534,
578
- 9,
579
- null,
580
- 20,
581
- null,
582
- null,
583
- null,
584
- 1,
585
- 1,
586
- 1,
587
- 94,
588
- null,
589
- null,
590
- null,
591
- null,
592
- 1,
593
- 1,
594
- 1,
595
- 45,
596
- 45,
597
- null,
598
- null,
599
- null,
600
- null,
601
- null,
602
- 1,
603
- 194,
604
- 45,
605
- 119,
606
- null,
607
- null,
608
- null,
609
- null,
610
- 1,
611
- null,
612
- null,
613
- 1,
614
- 1,
615
- 11,
616
- 11,
617
- null,
618
- null,
619
- null,
620
- 1,
621
- 11,
622
- 11,
623
- 11,
624
- 36,
625
- null,
626
- null,
627
- null,
628
- null,
629
- 1,
630
- 1,
631
- 1,
632
- 22,
633
- null,
634
- null,
635
- 1,
636
- 22,
637
- null,
638
- null,
639
- null,
640
- null
641
- ],
642
- "/home/tom/git/regexp-examples/lib/regexp-examples/regexp_extensions.rb": [
643
- 1,
644
- 1,
645
- 1,
646
- 112,
647
- null,
648
- null,
649
- 95,
650
- null,
651
- null,
652
- 1,
653
- null,
654
- null
655
- ],
656
- "/home/tom/git/regexp-examples/spec/regexp-examples_spec.rb": [
657
- 1,
658
- 1,
659
- 11,
660
- 80,
661
- 80,
662
- 80,
663
- 263,
664
- null,
665
- null,
666
- null,
667
- null,
668
- null,
669
- null,
670
- null,
671
- null,
672
- 1,
673
- 1,
674
- 12,
675
- 24,
676
- null,
677
- null,
678
- null,
679
- null,
680
- 1,
681
- 1,
682
- 5,
683
- 10,
684
- null,
685
- null,
686
- null,
687
- null,
688
- 1,
689
- 1,
690
- 9,
691
- 9,
692
- null,
693
- null,
694
- null,
695
- null,
696
- 1,
697
- 1,
698
- 1,
699
- null,
700
- null,
701
- null,
702
- null,
703
- null,
704
- null,
705
- null,
706
- null,
707
- null,
708
- null,
709
- null,
710
- 1,
711
- 1,
712
- null,
713
- null,
714
- null,
715
- null,
716
- null,
717
- null,
718
- null,
719
- 1,
720
- 1,
721
- null,
722
- null,
723
- null,
724
- null,
725
- null,
726
- null,
727
- null,
728
- null,
729
- null,
730
- null,
731
- null,
732
- null,
733
- null,
734
- null,
735
- null,
736
- null,
737
- null,
738
- 1,
739
- 1,
740
- null,
741
- null,
742
- null,
743
- null,
744
- null,
745
- null,
746
- null,
747
- 1,
748
- 1,
749
- null,
750
- null,
751
- null,
752
- null,
753
- null,
754
- null,
755
- null,
756
- null,
757
- null,
758
- null,
759
- null,
760
- null,
761
- null,
762
- null,
763
- null,
764
- null,
765
- null,
766
- null,
767
- 1,
768
- 1,
769
- null,
770
- null,
771
- null,
772
- null,
773
- null,
774
- null,
775
- null,
776
- null,
777
- null,
778
- null,
779
- null,
780
- 1,
781
- null,
782
- 1,
783
- null,
784
- null,
785
- null,
786
- null,
787
- null,
788
- null,
789
- null,
790
- null,
791
- null,
792
- null,
793
- null,
794
- 1,
795
- 1,
796
- null,
797
- null,
798
- null,
799
- null,
800
- null,
801
- null,
802
- null,
803
- null,
804
- null,
805
- null,
806
- null,
807
- null,
808
- null,
809
- null,
810
- null,
811
- 1,
812
- 1,
813
- null,
814
- null,
815
- null,
816
- null,
817
- null,
818
- null,
819
- null,
820
- null,
821
- 1,
822
- 1,
823
- null,
824
- null,
825
- null,
826
- null,
827
- null,
828
- null,
829
- null,
830
- null,
831
- 1,
832
- 1,
833
- null,
834
- null,
835
- null,
836
- null,
837
- null,
838
- null,
839
- null,
840
- null,
841
- null,
842
- null,
843
- null,
844
- 1,
845
- 1,
846
- null,
847
- null,
848
- null,
849
- null,
850
- null,
851
- null,
852
- null,
853
- 1,
854
- 1,
855
- null,
856
- null,
857
- null,
858
- null,
859
- null,
860
- null,
861
- 1,
862
- 1,
863
- null,
864
- null,
865
- null,
866
- null,
867
- null,
868
- null,
869
- null,
870
- null,
871
- null,
872
- null,
873
- null,
874
- null,
875
- 1,
876
- null,
877
- 1,
878
- 2,
879
- 2,
880
- 2,
881
- null,
882
- 1,
883
- 1,
884
- 1,
885
- null,
886
- null,
887
- 1,
888
- 1,
889
- null,
890
- null,
891
- null,
892
- 1,
893
- 1,
894
- 1,
895
- null,
896
- null,
897
- null,
898
- null,
899
- null,
900
- null,
901
- null
902
- ]
903
- },
904
- "timestamp": 1422185398
905
- }
906
- }