回答編集履歴
2
追記
test
CHANGED
@@ -37,3 +37,37 @@
|
|
37
37
|
?>
|
38
38
|
|
39
39
|
```
|
40
|
+
|
41
|
+
すみません、パターンが記載ミスしていましたので修正します
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
# 解説
|
46
|
+
|
47
|
+
$pattern="/(?<!\d)((\d{4})([\.\/])(\d{1,2})(?:\\3)(\d{1,2}))(?!\d)/";
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
- (?<!\d):否定後読み
|
52
|
+
|
53
|
+
- (?!\d):否定先読み
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
それぞれ日付データの前後に数字がないことを保証します
|
58
|
+
|
59
|
+
- 1) ((\d{4})([\.\/])(\d{1,2})(?:\\3)(\d{1,2}))を分解して
|
60
|
+
|
61
|
+
- 2)(\d{4}):年に当たる箇所は4桁の数字
|
62
|
+
|
63
|
+
- 3)([\.\/]):日付のセパレータはピリオド「.」かスラッシュ「/」
|
64
|
+
|
65
|
+
- 4)(\d{1,2}):月は1桁または2桁の数字
|
66
|
+
|
67
|
+
- 5)(?:\\3):前回出てきたのと同じセパレータ(3番めのカッコの中身)
|
68
|
+
|
69
|
+
- 6)(\d{1,2}):日には1桁または2桁の数字
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
あとは年と月と日のデータの組み合わせです
|
1
修正
test
CHANGED
@@ -12,7 +12,13 @@
|
|
12
12
|
|
13
13
|
$str = "test2016/10/10 2016/08/111 12016/08/111 2550.10-39 2016/1/1 2016.2.2 2016/08/04 2016/08/05 2016.10.23 2016.10.33 2016/13/23test";
|
14
14
|
|
15
|
+
/* 以下修正前
|
16
|
+
|
15
17
|
$pattern="/(?!=\d)((\d{4})([\.\/])(\d{1,2})(?:\\3)(\d{1,2}))(?!\d)/";
|
18
|
+
|
19
|
+
*/
|
20
|
+
|
21
|
+
$pattern="/(?<!\d)((\d{4})([\.\/])(\d{1,2})(?:\\3)(\d{1,2}))(?!\d)/";
|
16
22
|
|
17
23
|
$replacement=function($a){
|
18
24
|
|