0

相対 URL の 2 番目のスラッシュを一致させようとしています。

/dir/entry

/以下に合わせたいと思いますdir

4

3 に答える 3

1

パス内のディレクトリを分割しようとしている場合は、正規表現をツールボックスに残してexplode().

$parts = explode( '/', $path );
于 2012-12-04T17:08:24.747 に答える
0

2 番目のスラッシュだけを一致させますか? これを試して:

preg_match('~^/[^/]+\K/~', '/dir/entry');

\KMATCH POINT RESET構成です: 遭遇すると、正規表現エンジンはそれまでに見た文字を「忘れ」、現在の一致位置が一致の始まりであるかのように振る舞います。たとえば、2 番目のスラッシュを に置き換えたい場合、@通常は次のようにします。

preg_replace('~^(/[^/]+)/~', '$1@', '/dir/entry');  # /dir@entry

ただし、キャプチャ グループを使用できない状況にある場合は、次の\Kように設定します。

preg_replace('~^/[^/]+\K/~', '@', '/dir/entry');  # /dir@entry

\K私が知っているPerlとPHPでのみサポートされています。

于 2012-12-05T02:17:19.753 に答える
0

に意味はないので/、位置を知りたいのでしょう。の 4 番目のパラメーターを使用して実行できますpreg_match_all

preg_match_all('~/~', $input, $matches, PREG_OFFSET_CAPTURE);
$pos = $matches[0][1][1];

ただし、へのインデックス作成$matchesは非常に恐ろしいものです。最初のインデックスはキャプチャに対応します。0は完全な一致、1、など23、ここにはないグループ (パターン内の括弧のセット) をキャプチャした結果になります。2 番目のインデックスは一致に対応します。2 番目の一致が必要なため、 index に移動します1。最後のインデックスは0、実際に一致/キャプチャされた文字列と1、一致/キャプチャのオフセット用です。

于 2012-12-04T20:15:55.740 に答える