問題

在php中,找到並捕獲與給定正則表示式匹配的所有子字串相當簡單,但有沒有一種簡單的方法可以在字串中找到第一個正則表示式匹配的索引?

即我想要這樣執行的東西:

 $str = "123456789abcdefgh";
$index = preg_index("#abcd#", $str);
// $index == 9
 

  最佳答案

使用PREG_OFFSET_CAPTURE標誌與 preg_match :

 $str = "123456789abcdefgh";
$index = -1;
if(preg_match("#abcd#", $str, $matches, PREG_OFFSET_CAPTURE)) {
    $index = $matches[0][1];
}
 

上面的 [0] 對應於正則表示式內的捕獲組,其索引是您想要的(整個表示式的 0,如果存在的話,第一個捕獲組的 1 等),而 [1] 是一個固定的索引,如文件所示。

編輯:添加了一個if來使程式碼更具預設性,現在不認為模式肯定會匹配.

請參閱行動

  相同標籤的其他問題

phpregex