回答編集履歴

1

追記

2015/04/12 15:46

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -13,3 +13,85 @@
13
13
  # => ["0", ".", "1", "8", "8", "8", "999999999", "3", ..., "2", "E", "9"]
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+ ---
20
+
21
+
22
+
23
+ > N(>5)個以上連続するなら区切らず
24
+
25
+
26
+
27
+ `>5` なので、5個以上、ではなく、5個より多い(=6個以上)としています。
28
+
29
+
30
+
31
+ 次のようにバラして考えます。
32
+
33
+
34
+
35
+ ```lang-ruby
36
+
37
+ (
38
+
39
+ (.)
40
+
41
+ \2
42
+
43
+ {5,}
44
+
45
+ |
46
+
47
+ .
48
+
49
+ )
50
+
51
+ ```
52
+
53
+
54
+
55
+ `|` で区切られた前半が任意の 6 個以上連続する文字列で、後半が任意の 1 文字にマッチします。
56
+
57
+
58
+
59
+ 後半は説明するまでもないと思うので、前半だけ説明します。
60
+
61
+
62
+
63
+ `(.)`
64
+
65
+
66
+
67
+ 任意の 1 文字にマッチします。
68
+
69
+ 括弧で囲っているのでキャプチャされます。
70
+
71
+ これは 2 番目のキャプチャです。
72
+
73
+ 1 番目は全体を囲っている `( )` です。
74
+
75
+
76
+
77
+ `\2`
78
+
79
+
80
+
81
+ 2番目のキャプチャを後方参照します。
82
+
83
+ 要するに↑の `(.)` でマッチした文字です。
84
+
85
+
86
+
87
+ `{5,}`
88
+
89
+
90
+
91
+ 直前のパターンが 5 個以上連続するという意味です。
92
+
93
+ 要するに↑の `\2` が 5 個以上連続するという意味です。
94
+
95
+ なので↑↑の `(.)` が `(.)` 自身も含めて 6 個以上連続するという意味になります。
96
+
97
+