0

我正在尝试匹配相对 URL 中的第二个正斜杠。

/dir/entry

我想匹配/以下dir.

4

3 回答 3

1

如果您尝试拆分路径中的目录,则将正则表达式留在工具箱中并使用explode().

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

由于 没有任何意义/,我假设您想找出位置。您可以使用的第四个参数来做到这一点preg_match_all

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

但是,索引$matches非常可怕。第一个索引对应于捕获。0是整个匹配,1等等23是捕获组(模式内的括号集)的结果,您在这里没有。第二个索引对应于匹配。你想要第二场比赛,所以你想去 index 1。最后一个索引0用于实际匹配/捕获的字符串和1匹配/捕获的偏移量。

于 2012-12-04T20:15:55.740 回答
0

你想匹配第二个斜线而不是别的吗?尝试这个:

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

\KMATCH POINT RESET构造:当遇到它时,正则表达式引擎“忘记”它到目前为止看到的任何字符,并且就像当前匹配位置是匹配的开始一样。例如,如果你想用 替换第二个斜线@,你通常会这样做:

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

但是,如果您处于无法使用捕获组的情况下,\K将为您设置正确的:

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

\K仅在我所知道的 Perl 和 PHP 中受支持。

于 2012-12-05T02:17:19.753 回答