[英]Regular expression to match an exact number of occurrence for a certain character
[英]How can I match the second occurrence of a character with a regular expression?
我正在尝试在相对URL中匹配第二个正斜杠。
/dir/entry
我想匹配/
后面的dir
。
如果您试图分解路径中的目录,将正则表达式保留在工具箱中并使用explode()
可能是有意义的。
$parts = explode( '/', $path );
由于/
意义不大,因此我假设您想找出位置。 您可以使用preg_match_all
的第四个参数来实现:
preg_match_all('~/~', $input, $matches, PREG_OFFSET_CAPTURE);
$pos = $matches[0][1][1];
不过,将索引$matches
到$matches
是非常可怕的。 第一个索引对应于捕获。 0
是整场比赛, 1
, 2
, 3
等将捕获组(图案内套括号),这你不用在这里的结果。 第二个索引对应于匹配项。 您需要第二场比赛,因此您想获得索引1
。 最后一个指标是0
的实际匹配/捕获字符串和1
对比赛的/捕获的偏移。
您是否要匹配第二个斜杠,别无其他? 尝试这个:
preg_match('~^/[^/]+\K/~', '/dir/entry');
\\K
是MATCH POINT RESET
构造:遇到它时,正则表达式引擎“忘记”到目前为止所看到的任何字符,其行为就像是当前比赛的位置是比赛的开始。 例如,如果要用@
替换第二个斜杠,通常可以这样做:
preg_replace('~^(/[^/]+)/~', '$1@', '/dir/entry'); # /dir@entry
但是,如果您无法使用捕获组,则\\K
将设置正确:
preg_replace('~^/[^/]+\K/~', '@', '/dir/entry'); # /dir@entry
\\K
我所知,仅在Perl和PHP中支持\\K
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.