回答編集履歴

1

内容の修正

2015/10/12 04:07

投稿

K_S_
K_S_

スコア419

test CHANGED
@@ -1,12 +1,20 @@
1
+ 修正しました。
2
+
3
+
4
+
1
- 正規表現で以下のようなパターンを探せば、#2だけがり出せると思います。
5
+ 正規表現で以下のようなパターンを探せば、#2#の後ろに続く数字列を得できます。
6
+
7
+
2
8
 
3
9
  ```ここに言語を入力
4
10
 
5
- #2(#|$)
11
+ (?<=#2#)([0-9]*)
12
+
13
+ ```
6
14
 
7
15
 
8
16
 
9
- ```
17
+ phpではpreg_match_allという関数を用いれば、繰り返しマッチする文字列を取得できそうです。
10
18
 
11
19
 
12
20
 
@@ -32,13 +40,19 @@
32
40
 
33
41
  <?php
34
42
 
35
- $subject = "#2#22#222#22#2";
43
+ $subject = "#2#2000#3#3000#2#1800";
36
44
 
37
- $pattern = '/#2(#|$)/';
45
+ $pattern = '/(?<=#2#)([0-9]*)/';
38
46
 
39
- preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
47
+ preg_match_all($pattern, $subject, $matches);
40
48
 
49
+
50
+
41
- echo count($matches);
51
+ echo count($matches[0])." ";
52
+
53
+ echo $matches[0][0]." ";
54
+
55
+ echo $matches[0][1]." ";
42
56
 
43
57
  ?>
44
58
 
@@ -52,12 +66,16 @@
52
66
 
53
67
  ```
54
68
 
69
+ なぜ$matchesが多次元配列になるのかはわかりませんが(ご存知の方教えてください!)、
70
+
71
+ $matches[0]も$matches[1]も同じ値が入っていました。
72
+
55
73
 
56
74
 
57
75
  ```
58
76
 
59
77
  (実行結果)
60
78
 
61
- 2
79
+ 2 2000 1800
62
80
 
63
81
  ```