teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

修正

2016/05/24 14:01

投稿

hirohiro
hirohiro

スコア2068

answer CHANGED
@@ -17,8 +17,9 @@
17
17
 
18
18
  > 文字列中の数字にカンマをいれるときの正規表現
19
19
  ```正規表現
20
- s/(?<=\d)(?=(?:\d\d\d)+\D)/,/
20
+ s/(?<=\d)(?=(?:\d\d\d)+(\D|$))/,/g
21
21
  ```
22
+ ※コメントで指摘いただき修正しました(5/24)
22
23
  恐らくこんな感じ?
23
24
  例によって日本語訳すると
24
25
  「直前に数値が存在し、直後に1つ以上の”3桁の数値の塊り”が数値以外に行き当たるまで続くという条件を満たす”位置”」

4

値修正

2016/05/24 14:01

投稿

hirohiro
hirohiro

スコア2068

answer CHANGED
@@ -3,15 +3,15 @@
3
3
  ```
4
4
  これの検索条件を日本語で表すと
5
5
  「直前に数値が存在し、直後に1つ以上の”3桁の数値の塊り”が行末まで続くという条件を満たす”位置”」となります。(※文字は一つも指定されてないので位置ですね。)
6
- 例えば「55555555」の場合、「5」と「5555555」の間を見ると、”3桁の数値の塊り”が2つ続いたあと、末尾までに「55」が残りますので条件を満たしません。
6
+ 例えば「555555555」の場合、「5」と「55555555」の間を見ると、”3桁の数値の塊り”が2つ続いたあと、末尾までに「55」が残りますので条件を満たしません。
7
7
 
8
8
  行末記号を消した場合
9
9
  ```正規表現
10
10
  s/(?<=\d)(?=(?:\d\d\d)+)/,/
11
11
  ```
12
12
  「直前に数値が存在し、直後に1つ以上の”3桁の数値の塊り”が続くという条件を満たす”位置”」です。
13
- 「ここから55555555ここまで」の文字列を見ると、「ら」と「5」の間つまり数値の先頭には、その前に数値が無いので条件を満たしませんが、それ以降は条件を満たします。
13
+ 「ここから555555555ここまで」の文字列を見ると、「ら」と「5」の間つまり数値の先頭には、その前に数値が無いので条件を満たしませんが、それ以降は条件を満たします。
14
- 例えば[5]と「5555555」の間を見ると、直前に数値があり、その後方には3桁以上の数値の塊りが1つ以上存在しています。
14
+ 例えば[5]と「55555555」の間を見ると、直前に数値があり、その後方には3桁以上の数値の塊りが1つ以上存在しています。
15
15
  そして最後の3桁に入ると、後ろに3桁以上の数値が存在しなくなるので、条件を満たさなくなります。
16
16
  従って「ここから5,5,5,5,5,5,555ここまで」こうなるでしょう。
17
17
 

3

表現の修正

2016/05/19 13:25

投稿

hirohiro
hirohiro

スコア2068

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  ```
4
4
  これの検索条件を日本語で表すと
5
5
  「直前に数値が存在し、直後に1つ以上の”3桁の数値の塊り”が行末まで続くという条件を満たす”位置”」となります。(※文字は一つも指定されてないので位置ですね。)
6
- 例えば[5]と「5555555」の間を見ると、”3桁の数値の塊り”が2つ続いたあと、末尾までに「5」が残りますので条件を満たしません。
6
+ 例えば「55555555」の場合、「5と「5555555」の間を見ると、”3桁の数値の塊り”が2つ続いたあと、末尾までに「55」が残りますので条件を満たしません。
7
7
 
8
8
  行末記号を消した場合
9
9
  ```正規表現

2

表現の修正

2016/05/19 13:24

投稿

hirohiro
hirohiro

スコア2068

answer CHANGED
@@ -3,6 +3,7 @@
3
3
  ```
4
4
  これの検索条件を日本語で表すと
5
5
  「直前に数値が存在し、直後に1つ以上の”3桁の数値の塊り”が行末まで続くという条件を満たす”位置”」となります。(※文字は一つも指定されてないので位置ですね。)
6
+ 例えば[5]と「5555555」の間を見ると、”3桁の数値の塊り”が2つ続いたあと、末尾までに「5」が残りますので条件を満たしません。
6
7
 
7
8
  行末記号を消した場合
8
9
  ```正規表現

1

表現修正

2016/05/19 13:23

投稿

hirohiro
hirohiro

スコア2068

answer CHANGED
@@ -2,14 +2,16 @@
2
2
  s/(?<=\d)(?=(?:\d\d\d)+$)/,/
3
3
  ```
4
4
  これの検索条件を日本語で表すと
5
- 「直前に数値が存在し、その後に1つ以上の”3桁の数値の塊り”が行末まで続くという条件を満たす”位置”」となります。(※文字は一つも指定されてないので位置ですね。)
5
+ 「直前に数値が存在し、後に1つ以上の”3桁の数値の塊り”が行末まで続くという条件を満たす”位置”」となります。(※文字は一つも指定されてないので位置ですね。)
6
6
 
7
7
  行末記号を消した場合
8
8
  ```正規表現
9
9
  s/(?<=\d)(?=(?:\d\d\d)+)/,/
10
10
  ```
11
- 「直前に数値が存在し、その後に1つ以上の”3桁の数値の塊り”が続くという条件を満たす”位置”」です。
11
+ 「直前に数値が存在し、後に1つ以上の”3桁の数値の塊り”が続くという条件を満たす”位置”」です。
12
- 「ここから55555555ここまで」の文字列を見ると、「ら」と「5」の間つまり数値の先頭には、その前に数値が無いので条件を満たしませんが、それ以降は条件を満たします。そして最後の3桁に入ると、後ろに3桁以上の数値が存在しなくなるので、条件を満たさなくなります。
12
+ 「ここから55555555ここまで」の文字列を見ると、「ら」と「5」の間つまり数値の先頭には、その前に数値が無いので条件を満たしませんが、それ以降は条件を満たします。
13
+ 例えば[5]と「5555555」の間を見ると、直前に数値があり、その後方には3桁以上の数値の塊りが1つ以上存在しています。
14
+ そして最後の3桁に入ると、後ろに3桁以上の数値が存在しなくなるので、条件を満たさなくなります。
13
15
  従って「ここから5,5,5,5,5,5,555ここまで」こうなるでしょう。
14
16
 
15
17
  > 文字列中の数字にカンマをいれるときの正規表現
@@ -18,4 +20,4 @@
18
20
  ```
19
21
  恐らくこんな感じ?
20
22
  例によって日本語訳すると
21
- 「直前に数値が存在し、その後に1つ以上の”3桁の数値の塊り”が数値以外に行き当たるまで続くという条件を満たす”位置”」
23
+ 「直前に数値が存在し、後に1つ以上の”3桁の数値の塊り”が数値以外に行き当たるまで続くという条件を満たす”位置”」