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

回答編集履歴

4

加筆修正

2018/03/21 12:05

投稿

退会済みユーザー
answer CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  $patterns = array("/^[12][0-9]{2}$/m", "/^[3-9][0-9]{2}$/m", "/^[1-9][0-9]$/m", "/^[0-9]$/m");
80
80
  $replacements = array('A', 'B', 'A', 'A');
81
- $patterns_2nd = array('/A/', '/B/');
81
+ $patterns_2nd = array('/^A$/m', '/^B$/m');
82
82
  $replacements_2nd = array('0', '1');
83
83
 
84
84
  $targetText = preg_replace($patterns, $replacements, $targetText);

3

加筆修正

2018/03/21 12:05

投稿

退会済みユーザー
answer CHANGED
@@ -76,7 +76,7 @@
76
76
  900
77
77
  EOT;
78
78
 
79
- $patterns = array("/[12][0-9]{2}/", "/[3-9][0-9]{2}/", "/[1-9][0-9]/", "/[0-9]/");
79
+ $patterns = array("/^[12][0-9]{2}$/m", "/^[3-9][0-9]{2}$/m", "/^[1-9][0-9]$/m", "/^[0-9]$/m");
80
80
  $replacements = array('A', 'B', 'A', 'A');
81
81
  $patterns_2nd = array('/A/', '/B/');
82
82
  $replacements_2nd = array('0', '1');
@@ -96,4 +96,7 @@
96
96
  > 0
97
97
  > 0
98
98
  > 1
99
- > 1
99
+ > 1
100
+
101
+ [PHP: 正規表現パターンに使用可能な修飾子 - Manual](http://php.net/manual/ja/reference.pcre.pattern.modifiers.php)
102
+ `/m`で複数行データでもヒットするようになります。

2

加筆修正

2018/03/21 12:03

投稿

退会済みユーザー
answer CHANGED
@@ -55,4 +55,45 @@
55
55
  > 0
56
56
  > 0
57
57
  > 1
58
+ > 1
59
+
60
+ `preg_replace()`使ってみると
61
+
62
+ ```php
63
+ <?php
64
+
65
+ $targetText = <<<EOT
66
+ 0
67
+ 1
68
+ 2
69
+ 3
70
+ 10
71
+ 20
72
+ 30
73
+ 100
74
+ 200
75
+ 300
76
+ 900
77
+ EOT;
78
+
79
+ $patterns = array("/[12][0-9]{2}/", "/[3-9][0-9]{2}/", "/[1-9][0-9]/", "/[0-9]/");
80
+ $replacements = array('A', 'B', 'A', 'A');
81
+ $patterns_2nd = array('/A/', '/B/');
82
+ $replacements_2nd = array('0', '1');
83
+
84
+ $targetText = preg_replace($patterns, $replacements, $targetText);
85
+ $targetText = preg_replace($patterns_2nd, $replacements_2nd, $targetText);
86
+
87
+ echo $targetText;
88
+ ```
89
+ > 0
90
+ > 0
91
+ > 0
92
+ > 0
93
+ > 0
94
+ > 0
95
+ > 0
96
+ > 0
97
+ > 0
98
+ > 1
58
99
  > 1

1

加筆修正

2018/03/21 09:27

投稿

退会済みユーザー
answer CHANGED
@@ -16,4 +16,43 @@
16
16
  echo '1' . "\n";
17
17
  }
18
18
  }
19
- ```
19
+ ```
20
+ で、ちゃんと`preg_match()`を使うと
21
+ ```php
22
+ <?php
23
+
24
+ $targetText = <<<EOT
25
+ 0
26
+ 1
27
+ 2
28
+ 3
29
+ 10
30
+ 20
31
+ 30
32
+ 100
33
+ 200
34
+ 300
35
+ 900
36
+ EOT;
37
+
38
+ $data = explode("\n", $targetText);
39
+
40
+ foreach ($data as $val) {
41
+ if (preg_match("/^[012][0-9]{0,2}$/", $val) || preg_match("/^[3-9][0-9]?$/", $val) ) {
42
+ echo '0' . "\n";
43
+ } else {
44
+ echo '1' . "\n";
45
+ }
46
+ }
47
+ ```
48
+ > 0
49
+ > 0
50
+ > 0
51
+ > 0
52
+ > 0
53
+ > 0
54
+ > 0
55
+ > 0
56
+ > 0
57
+ > 1
58
+ > 1