回答編集履歴

3

「逆順にして置き換え処理」、「繰り返し」追加

2016/05/24 05:58

投稿

pmint
pmint

スコア33

test CHANGED
@@ -21,3 +21,39 @@
21
21
 
22
22
 
23
23
  でもこれだと「左から3桁ずつ」なので、よくないですね。
24
+
25
+ 終端から先頭方向へマッチする表現が無いので、文字を逆順にするか、繰り返し処理する必要があると思います。
26
+
27
+
28
+
29
+ ```regex
30
+
31
+ # 逆順にして置き換え処理
32
+
33
+ $a = '「555555555」';
34
+
35
+ $a = reverse $a;
36
+
37
+ $a =~ s/(\d\d\d)(?=\d)/$1,/g;
38
+
39
+ $a = reverse $a;
40
+
41
+ print $a;
42
+
43
+ ```
44
+
45
+
46
+
47
+ ```regex
48
+
49
+ # 繰り返し
50
+
51
+ $a = '「555555555」';
52
+
53
+ while($a =~ s/(?<=\d)(\d\d\d)(?=\D)/,$1/){};
54
+
55
+ print $a;
56
+
57
+ ```
58
+
59
+

2

後読み

2016/05/24 05:58

投稿

pmint
pmint

スコア33

test CHANGED
@@ -1,6 +1,6 @@
1
1
  マッチしていたら5の個数は減るはずですよね。結果を見ると文字間(0文字)にマッチしているようです。
2
2
 
3
- 先読み(<?=)・後読み(?=)の間の「本体にあたる部分」がないので、読みの(?=)を外せば意味を成すようになるのではないでしょうか。
3
+ 先読み(<?=)・後読み(?=)の間の「本体にあたる部分」がないので、読みの(<?=)を外せば意味を成すようになるのではないでしょうか。
4
4
 
5
5
 
6
6
 
@@ -14,10 +14,10 @@
14
14
 
15
15
  ```regex
16
16
 
17
- s/(?<=¥d)(¥d¥d¥d)/$1,/g
17
+ s/(¥d¥d¥d)(?=¥d)/$1,/g
18
18
 
19
19
  ```
20
20
 
21
21
 
22
22
 
23
- これでいかがしょうか
23
+ でもこれだと「左から3桁ずつ」なの、よくないですね

1

s

2016/05/24 05:02

投稿

pmint
pmint

スコア33

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  ```regex
16
16
 
17
- /(?<=¥d)(¥d¥d¥d)/$1,/g
17
+ s/(?<=¥d)(¥d¥d¥d)/$1,/g
18
18
 
19
19
  ```
20
20