簡體   English   中英

如何將第二次出現的字符與正則表達式匹配?

[英]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是整場比賽, 123等將捕獲組(圖案內套括號),這你不用在這里的結果。 第二個索引對應於匹配項。 您需要第二場比賽,因此您想獲得索引1 最后一個指標是0的實際匹配/捕獲字符串和1對比賽的/捕獲的偏移。

您是否要匹配第二個斜杠,別無其他? 嘗試這個:

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中支持\\K

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM