回答編集履歴
1
sample
test
CHANGED
@@ -2,16 +2,62 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
(?=.*/aaaa/[a-z]+/)→「/aaaa/」の後ろにa~zが1文字以上あって「/」が付く文字列にヒットし
|
5
|
+
- (?=.*/aaaa/[a-z]+/)→「/aaaa/」の後ろにa~zが1文字以上あって「/」が付く文字列にヒットし
|
6
|
+
|
7
|
+
|
6
8
|
|
7
9
|
ただし・・・
|
8
10
|
|
9
|
-
(?!.*/aaaa/[a-z]*/[0-9]*/)→その後ろに数字+「/」が続かず
|
11
|
+
- (?!.*/aaaa/[a-z]*/[0-9]*/)→その後ろに数字+「/」が続かず
|
10
12
|
|
11
|
-
(?!.*\?)→「?」が出現せず、
|
13
|
+
- (?!.*\?)→「?」が出現せず、
|
12
14
|
|
13
|
-
(?!.*/aaaa/[a-z]*/dddd/).*')→「/dddd/」と続かないもの
|
15
|
+
- (?!.*/aaaa/[a-z]*/dddd/).*')→「/dddd/」と続かないもの
|
14
16
|
|
15
17
|
|
16
18
|
|
17
19
|
にヒットさせます
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
# sample
|
24
|
+
|
25
|
+
とりあえずPHPでsampleつけておきます
|
26
|
+
|
27
|
+
※文字列にスラッシュを含むのでデリミタは|にしてあります
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
```PHP
|
32
|
+
|
33
|
+
check("aaaa/xyz/"); //→aaaaの前にスラッシュがないのでNG
|
34
|
+
|
35
|
+
check("/aaaa/xyz"); //→aaaaの後の英字の後にスラッシュがないのでNG
|
36
|
+
|
37
|
+
check("/aaaa/xyz/"); //→マッチするのでOK
|
38
|
+
|
39
|
+
check("xxx/aaaa/xyz/"); //→/aaaaの前に文字があってもOK
|
40
|
+
|
41
|
+
check("xxx/aaaa/xyz123/"); //→/aaaa/の直後に英字以外がきてスラッシュで閉じるとNG
|
42
|
+
|
43
|
+
check("xxx/aaaa/abc/123/"); //→/aaaa/の直後に英字がきてスラッシュ、その後数字だけがきてスラッシュで閉じるとNG
|
44
|
+
|
45
|
+
check("xxx/aaaa/abc/a123/"); //→数字だけじゃなければOK
|
46
|
+
|
47
|
+
check("xxx/aaaa/abc/ddd/"); //→ddd/はOK
|
48
|
+
|
49
|
+
check("xxx/aaaa/abc/dddd/"); //→dddd/はNG
|
50
|
+
|
51
|
+
check("xxx/aaaa/abc/ddddd/"); //→ddddd/はOK
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
function check($str){
|
56
|
+
|
57
|
+
$pattern="|^(?=.*/aaaa/[a-z]+/)(?!.*/aaaa/[a-z]*/[0-9]*/)(?!.*\?)(?!.*/aaaa/[a-z]*/dddd/).*|";
|
58
|
+
|
59
|
+
print $str.":".( preg_match($pattern,$str)?"ok":"ng")."<br>\n";
|
60
|
+
|
61
|
+
}
|
62
|
+
|
63
|
+
```
|