PHP在string中查找所有出现的子string

我需要parsing一个HTML文档,并查找所有出现的stringasdf

我目前有HTML加载到一个stringvariables。 我只是喜欢字符位置,所以我可以通过列表循环来返回string后的一些数据。

strpos函数只返回第一次出现。 如何返回所有这些?

不使用正则expression式,像这样的东西应该返回string位置:

 $html = "dddasdfdddasdffff"; $needle = "asdf"; $lastPos = 0; $positions = array(); while (($lastPos = strpos($html, $needle, $lastPos))!== false) { $positions[] = $lastPos; $lastPos = $lastPos + strlen($needle); } // Displays 3 and 10 foreach ($positions as $value) { echo $value ."<br />"; } 

您可以反复调用strpos函数,直到找不到匹配项。 您必须指定偏移参数。

注意:在下面的例子中,search从下一个字符继续,而不是从前一个匹配结束。 根据这个函数, aaaa包含三个子串aa ,而不是两个。

 function strpos_all($haystack, $needle) { $offset = 0; $allpos = array(); while (($pos = strpos($haystack, $needle, $offset)) !== FALSE) { $offset = $pos + 1; $allpos[] = $pos; } return $allpos; } print_r(strpos_all("aaa bbb aaa bbb aaa bbb", "aa")); 

输出:

 Array ( [0] => 0 [1] => 1 [2] => 8 [3] => 9 [4] => 16 [5] => 17 ) 

最好使用substr_count 。 检查在php.net

 function getocurence($chaine,$rechercher) { $lastPos = 0; $positions = array(); while (($lastPos = strpos($chaine, $rechercher, $lastPos))!== false) { $positions[] = $lastPos; $lastPos = $lastPos + strlen($rechercher); } return $positions; } 

这可以使用strpos()函数完成。 以下代码是使用for循环实现的。 这段代码非常简单,非常简单。

 <?php $str_test = "Hello World! welcome to php"; $count = 0; $find = "o"; $positions = array(); for($i = 0; $i<strlen($str_test); $i++) { $pos = strpos($str_test, $find, $count); if($pos == $count){ $positions[] = $pos; } $count++; } foreach ($positions as $value) { echo '<br/>' . $value . "<br />"; } ?> 

使用preg_match_all查找所有的事件。

 preg_match_all('/(\$[az]+)/i', $str, $matches); 

进一步的参考检查这个链接 。