43993


**キャプチャ取得したいURLパス**  
・/hoge/test/ディレクトリ以下の2階層までを順番にキャプチャ取得したい

**分からないこと**  
・指定階層以下にスラッシュが含まれたURLだと、キャプチャ順番がずれてしまう

* * *

**試した内容**

[code]

    location ^~/hoge/test/(.*)/(.*)/ {
    
[/code]

* * *

**意図した通り取得できるURL**  
・$1$2でab取得

> /hoge/test/a/b/

・$1$2でcd取得

> /hoge/test/c/d/e

**意図した通り取得できないURL**  
・$1$2でfg取得したいのに、ghを習得してしまう

> /hoge/test/f/g/h/

* * *

**Q**  
・下記URLで、常に$1で任意1、$2で任意2を取得するにはどうすれば良いでしょうか？

> /hoge/test/任意1/任意2/◯/◯  
>  /hoge/test/任意1/任意2/◯/◯/  
>  /hoge/test/任意1/任意2/◯/◯/◯/◯/◯


CC BY-SA 4.0
2018-05-14T03:03:24.480
43967
2018-05-15T02:26:45.163
2018-05-15T01:08:33.607
7886
7886
question
nginx 正規表現
Nginxのlocationで、固定ディレクトリ以下の任意のパスを、2階層まで順番にキャプチャ取得したい


条件を`.*`とした場合、`.`(任意の一文字)には`/`も含まれ、かつ`*`は「最長マッチ」を行うので、なるべく長いパターンにマッチしようとしてうまくいかないのだと思います。

個々のディレクトリ名にマッチさせたいのであれば、以下の様なパターンになるのではないでしょうか。

[code]

    /hoge/test/([^/]+)/([^/]+)
    
[/code]

  * `[ ]`がカッコの中の任意の一文字、その中の1文字目が`^`なので否定、2文字目に`/`があるので、`[^/]`は **スラッシュを含まない任意の一文字**
  * `+`は直前のパターンの1回以上の繰り返しなので、`[^/]+`で **スラッシュを含まない1文字以上の文字列(=ディレクトリ名)**


CC BY-SA 4.0
2018-05-15T02:26:45.163
43993
2018-05-15T02:26:45.163
3060
43967
answer