相対 URL の 2 番目のスラッシュを一致させようとしています。
/dir/entry
/以下に合わせたいと思いますdir。
パス内のディレクトリを分割しようとしている場合は、正規表現をツールボックスに残してexplode().
$parts = explode( '/', $path );
2 番目のスラッシュだけを一致させますか? これを試して:
preg_match('~^/[^/]+\K/~', '/dir/entry');
\KはMATCH POINT RESET構成です: 遭遇すると、正規表現エンジンはそれまでに見た文字を「忘れ」、現在の一致位置が一致の始まりであるかのように振る舞います。たとえば、2 番目のスラッシュを に置き換えたい場合、@通常は次のようにします。
preg_replace('~^(/[^/]+)/~', '$1@', '/dir/entry'); # /dir@entry
ただし、キャプチャ グループを使用できない状況にある場合は、次の\Kように設定します。
preg_replace('~^/[^/]+\K/~', '@', '/dir/entry'); # /dir@entry
\K私が知っているPerlとPHPでのみサポートされています。
に意味はないので/、位置を知りたいのでしょう。の 4 番目のパラメーターを使用して実行できますpreg_match_all。
preg_match_all('~/~', $input, $matches, PREG_OFFSET_CAPTURE);
$pos = $matches[0][1][1];
ただし、へのインデックス作成$matchesは非常に恐ろしいものです。最初のインデックスはキャプチャに対応します。0は完全な一致、1、など2は3、ここにはないグループ (パターン内の括弧のセット) をキャプチャした結果になります。2 番目のインデックスは一致に対応します。2 番目の一致が必要なため、 index に移動します1。最後のインデックスは0、実際に一致/キャプチャされた文字列と1、一致/キャプチャのオフセット用です。