Мне нужно проанализировать 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);
Для дополнительной справки проверьте эту ссылку .