回答編集履歴

1

sample

2017/08/08 14:16

投稿

yambejp
yambejp

スコア114843

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
+ ```