PHP 查找字符串中子字符串的所有匹配项
我需要解析HTML文档并查找其中所有出现的字符串。asdf
我目前已将HTML加载到字符串变量中。我只想要字符位置,这样我就可以遍历列表以在字符串之后返回一些数据。
该函数仅返回第一个匹配项。如何将其全部退回?strpos
我需要解析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
的出现,而不是两次。
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
)