相対 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
、一致/キャプチャのオフセット用です。