回答編集履歴

4

加筆修正

2018/03/21 12:05

投稿

退会済みユーザー
test CHANGED
@@ -158,7 +158,7 @@
158
158
 
159
159
  $replacements = array('A', 'B', 'A', 'A');
160
160
 
161
- $patterns_2nd = array('/A/', '/B/');
161
+ $patterns_2nd = array('/^A$/m', '/^B$/m');
162
162
 
163
163
  $replacements_2nd = array('0', '1');
164
164
 

3

加筆修正

2018/03/21 12:05

投稿

退会済みユーザー
test CHANGED
@@ -154,7 +154,7 @@
154
154
 
155
155
 
156
156
 
157
- $patterns = array("/[12][0-9]{2}/", "/[3-9][0-9]{2}/", "/[1-9][0-9]/", "/[0-9]/");
157
+ $patterns = array("/^[12][0-9]{2}$/m", "/^[3-9][0-9]{2}$/m", "/^[1-9][0-9]$/m", "/^[0-9]$/m");
158
158
 
159
159
  $replacements = array('A', 'B', 'A', 'A');
160
160
 
@@ -195,3 +195,9 @@
195
195
  > 1
196
196
 
197
197
  > 1
198
+
199
+
200
+
201
+ [PHP: 正規表現パターンに使用可能な修飾子 - Manual](http://php.net/manual/ja/reference.pcre.pattern.modifiers.php)
202
+
203
+ `/m`で複数行データでもヒットするようになります。

2

加筆修正

2018/03/21 12:03

投稿

退会済みユーザー
test CHANGED
@@ -113,3 +113,85 @@
113
113
  > 1
114
114
 
115
115
  > 1
116
+
117
+
118
+
119
+ `preg_replace()`使ってみると
120
+
121
+
122
+
123
+ ```php
124
+
125
+ <?php
126
+
127
+
128
+
129
+ $targetText = <<<EOT
130
+
131
+ 0
132
+
133
+ 1
134
+
135
+ 2
136
+
137
+ 3
138
+
139
+ 10
140
+
141
+ 20
142
+
143
+ 30
144
+
145
+ 100
146
+
147
+ 200
148
+
149
+ 300
150
+
151
+ 900
152
+
153
+ EOT;
154
+
155
+
156
+
157
+ $patterns = array("/[12][0-9]{2}/", "/[3-9][0-9]{2}/", "/[1-9][0-9]/", "/[0-9]/");
158
+
159
+ $replacements = array('A', 'B', 'A', 'A');
160
+
161
+ $patterns_2nd = array('/A/', '/B/');
162
+
163
+ $replacements_2nd = array('0', '1');
164
+
165
+
166
+
167
+ $targetText = preg_replace($patterns, $replacements, $targetText);
168
+
169
+ $targetText = preg_replace($patterns_2nd, $replacements_2nd, $targetText);
170
+
171
+
172
+
173
+ echo $targetText;
174
+
175
+ ```
176
+
177
+ > 0
178
+
179
+ > 0
180
+
181
+ > 0
182
+
183
+ > 0
184
+
185
+ > 0
186
+
187
+ > 0
188
+
189
+ > 0
190
+
191
+ > 0
192
+
193
+ > 0
194
+
195
+ > 1
196
+
197
+ > 1

1

加筆修正

2018/03/21 09:27

投稿

退会済みユーザー
test CHANGED
@@ -35,3 +35,81 @@
35
35
  }
36
36
 
37
37
  ```
38
+
39
+ で、ちゃんと`preg_match()`を使うと
40
+
41
+ ```php
42
+
43
+ <?php
44
+
45
+
46
+
47
+ $targetText = <<<EOT
48
+
49
+ 0
50
+
51
+ 1
52
+
53
+ 2
54
+
55
+ 3
56
+
57
+ 10
58
+
59
+ 20
60
+
61
+ 30
62
+
63
+ 100
64
+
65
+ 200
66
+
67
+ 300
68
+
69
+ 900
70
+
71
+ EOT;
72
+
73
+
74
+
75
+ $data = explode("\n", $targetText);
76
+
77
+
78
+
79
+ foreach ($data as $val) {
80
+
81
+ if (preg_match("/^[012][0-9]{0,2}$/", $val) || preg_match("/^[3-9][0-9]?$/", $val) ) {
82
+
83
+ echo '0' . "\n";
84
+
85
+ } else {
86
+
87
+ echo '1' . "\n";
88
+
89
+ }
90
+
91
+ }
92
+
93
+ ```
94
+
95
+ > 0
96
+
97
+ > 0
98
+
99
+ > 0
100
+
101
+ > 0
102
+
103
+ > 0
104
+
105
+ > 0
106
+
107
+ > 0
108
+
109
+ > 0
110
+
111
+ > 0
112
+
113
+ > 1
114
+
115
+ > 1