PHP Найти все вхождения подстроки в строке

Мне нужно проанализировать HTML-документ и найти все вхождения строки asdf в нем.

В настоящее время HTML загружается в строковую переменную. Я бы просто хотел, чтобы позиция символа, чтобы я мог перебирать список, чтобы возвращать некоторые данные после строки.

Функция strpos возвращает только первое вхождение. Как насчет возвращения всех из них?

Не используя регулярное выражение, что-то вроде этого должно работать для возврата строковых позиций:

 $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 несколько раз, пока совпадение не будет найдено. Вы должны указать параметр смещения.

Примечание: в следующем примере поиск продолжается от следующего символа, а не от конца предыдущего совпадения. Согласно этой функции aaaa содержит три вхождения подстроки aa , 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); 

Для дополнительной справки проверьте эту ссылку .