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

回答編集履歴

1

内容の修正

2015/10/12 04:07

投稿

K_S_
K_S_

スコア419

answer CHANGED
@@ -1,9 +1,13 @@
1
+ 修正しました。
2
+
1
- 正規表現で以下のようなパターンを探せば、#2だけがり出せると思います。
3
+ 正規表現で以下のようなパターンを探せば、#2#の後ろに続く数字列を得できます。
4
+
2
5
  ```ここに言語を入力
3
- #2(#|$)
6
+ (?<=#2#)([0-9]*)
4
-
5
7
  ```
6
8
 
9
+ phpではpreg_match_allという関数を用いれば、繰り返しマッチする文字列を取得できそうです。
10
+
7
11
  以下にphpコードを載せます。
8
12
  ```php
9
13
  <!DOCTYPE html>
@@ -15,18 +19,23 @@
15
19
  <body>
16
20
  <p>
17
21
  <?php
18
- $subject = "#2#22#222#22#2";
22
+ $subject = "#2#2000#3#3000#2#1800";
19
- $pattern = '/#2(#|$)/';
23
+ $pattern = '/(?<=#2#)([0-9]*)/';
20
- preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
24
+ preg_match_all($pattern, $subject, $matches);
25
+
21
- echo count($matches);
26
+ echo count($matches[0])." ";
27
+ echo $matches[0][0]." ";
28
+ echo $matches[0][1]." ";
22
29
  ?>
23
30
  </p>
24
31
 
25
32
  </body>
26
33
  </html>
27
34
  ```
35
+ なぜ$matchesが多次元配列になるのかはわかりませんが(ご存知の方教えてください!)、
36
+ $matches[0]も$matches[1]も同じ値が入っていました。
28
37
 
29
38
  ```
30
39
  (実行結果)
31
- 2
40
+ 2 2000 1800
32
41
  ```