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

質問編集履歴

3

試したコードを追加

2020/08/02 09:51

投稿

gongitune3
gongitune3

スコア12

title CHANGED
File without changes
body CHANGED
@@ -45,16 +45,22 @@
45
45
  ```
46
46
  日本語でいうと、「『否定部分(`●●`や`▲▲`)』それ自体が、あるかないかわからない」ということになるのかと思います。
47
47
 
48
+ そのため、
49
+ ➀後ろにはてなマークをつけて`(否定部分[文字列])?`という表現を試したのですが実現できず、
50
+ ➁あと`否定部分([文字列])?`という風に文字列の部分だけをあるかないかわからないと表現したのも実現できず、
48
- そのため、後ろはてなマークをつけて`(否定部分)?`という表現を試したのですが実現できず、あとは`否定部分|`という風に、`否定部分または何もない`という表現も試したのですがやはり実現できず、このようなときはどうしたらよろしいでしょうか。
51
+ ➂さらに`否定部分|`という風に、`否定部分または何もない`という表現も試したのですがやはり実現できず、このようなときはどうしたらよろしいでしょうか。
49
52
 
50
53
  ```php
51
54
  // 上記コード
52
55
  $pattern = '{https?://example.com/(?!us)[a-z]{2}(?!?q=)[^/]+}';
53
56
 
54
- // 後ろにはてなマークをつける表現 → 実現できず
57
+ // 後ろにはてなマークをつける表現 → 実現できず
55
58
  $pattern = '{https?://example.com/((?!us)[a-z]{2})?((?!?q=)[^/]+)?}';
56
59
 
60
+ // ➁否定部分の文字列の後ろにはてなマークをつける表現 → 実現できず
61
+ $pattern = '{https?://example.com/(?!us)([a-z]{2})?(?!\q=)([^/]+)?}';
62
+
57
- // 否定部分または何もないという表現 → 実現できず
63
+ // 否定部分または何もないという表現 → 実現できず
58
64
  $pattern = '{https?://example.com/((?!us)[a-z]{2}|)((?!\q=)[^/]+|)}';
59
65
 
60
66
  ```

2

試したコードの追加

2020/08/02 09:51

投稿

gongitune3
gongitune3

スコア12

title CHANGED
File without changes
body CHANGED
@@ -45,10 +45,16 @@
45
45
  ```
46
46
  日本語でいうと、「『否定部分(`●●`や`▲▲`)』それ自体が、あるかないかわからない」ということになるのかと思います。
47
47
 
48
- そのため、後ろにはてなマークをつけて`(否定部分)?`という方法を試したのですが実現できず、このようなときはどうしたらよろしいでしょうか。
48
+ そのため、後ろにはてなマークをつけて`(否定部分)?`という表現を試したのですが実現できず、あとは`否定部分|`という風に、`否定部分または何もない`という表現も試したのですがやはり実現できず、このようなときはどうしたらよろしいでしょうか。
49
49
 
50
50
  ```php
51
+ // 上記コード
51
52
  $pattern = '{https?://example.com/(?!us)[a-z]{2}(?!?q=)[^/]+}';
53
+
52
-
54
+ // 後ろにはてなマークをつける表現 → 実現できず
53
55
  $pattern = '{https?://example.com/((?!us)[a-z]{2})?((?!?q=)[^/]+)?}';
56
+
57
+ // 否定部分または何もないという表現 → 実現できず
58
+ $pattern = '{https?://example.com/((?!us)[a-z]{2}|)((?!\q=)[^/]+|)}';
59
+
54
60
  ```

1

$urlを追加

2020/08/02 09:44

投稿

gongitune3
gongitune3

スコア12

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,9 @@
1
1
  下記コードに並ぶ`$url`のうち、最後の2つができなくて行き詰っています。
2
2
 
3
- 大まかには`https://example.com/●●?q=▲▲`
3
+ 大まかには`https://example.com/●●▲▲`
4
4
  のような`$url`が与えられ、
5
5
  ➀`●●`が`us`だと不一致としたい
6
- ➁`▲▲`が`?q=`だと不一致としたい
6
+ ➁`▲▲`が`q=`だと不一致としたい
7
7
  という条件で、だいたいうまくできています。
8
8
 
9
9
  しかしここに
@@ -13,28 +13,28 @@
13
13
  それが下記の最後の2つの`$url`で、`→ できない`とある部分です。
14
14
 
15
15
  ```php
16
- <?php
17
16
  /*
18
17
  不一致にしたい$url
19
18
  ************************/
20
- $url = "https://example.com/us?q=aa"; //「us」も「?q=」もあるので、不一致
19
+ $url = "https://example.com/us?q=aaa"; //「us」も「?q=」もあるので、不一致
21
- $url = "https://example.com/jp?q=aa"; //「?q=」があるので、不一致
20
+ $url = "https://example.com/jp?q=aaa"; //「q=」があるので、不一致
22
- $url = "https://example.com/us?qx=aa"; //「us」があるので、不一致
21
+ $url = "https://example.com/us?qx=aaa"; //「us」があるので、不一致
23
- $url = "https://example.com/us"; //「us」があるので、不一致
22
+ $url = "https://example.com/us"; //「us」があるので、不一致
24
- $url = "https://example.com/?q=aa"; //「?q=」があるので、不一致
23
+ $url = "https://example.com/?q=aaa"; //「q=」があるので、不一致
24
+ $url = "https://example.com/?sort=date&q=aaa"; //「q=」があるので、不一致
25
25
 
26
26
  /*
27
27
  一致にしたい$url
28
28
  ************************/
29
- $url = "https://example.com/jp?qx=aa"; //「us」も「?q=」もないので、一致
29
+ $url = "https://example.com/jp?qx=aaa"; //「us」も「q=」もないので、一致
30
- $url = "https://example.com/jp"; //「us」も「?q=」もないので、一致 → できない
30
+ $url = "https://example.com/jp"; //「us」も「q=」もないので、一致 → できない
31
- $url = "https://example.com/"; //「us」も「?q=」もないので、一致 → できない
31
+ $url = "https://example.com/"; //「us」も「q=」もないので、一致 → できない
32
32
 
33
33
  /*
34
34
  検証を実行
35
35
  ************************/
36
- $pattern = '{https?://example.com/(?!us)[a-z]{2}(?!?q=)[^/]+}';
36
+ $pattern = '{https?://example.com/(?!us)[a-z]{2}(?!\q=)[^/]+}';
37
- var_dump( is_match( $url, $pattern) );
37
+ var_dump( is_match($url,$pattern) );
38
38
  function is_match( $url, $pattern ){
39
39
  if ( preg_match( $pattern, $url , $match ) ) {
40
40
  return '一致';