![](/img/trans.png)
[英]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.