Pregunta PHP Encuentra todas las apariciones de una subcadena en una cadena


Necesito analizar un documento HTML y encontrar todas las apariciones de cadena asdf en eso.

Actualmente tengo cargado el HTML en una variable de cadena. Me gustaría simplemente la posición del personaje para poder recorrer la lista y devolver algunos datos después de la cadena.

los strpos la función solo devuelve el primero ocurrencia. ¿Qué hay de regresar? todas ¿de ellos?


38
2018-04-01 03:55


origen


Respuestas:


Sin usar regex, algo como esto debería funcionar para devolver las posiciones de cadena:

$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 />";
}

63
2018-04-01 04:01



Puedes llamar al strpos funcionar repetidamente hasta que no se encuentre una coincidencia. Debe especificar el parámetro de desplazamiento.

Nota: en el siguiente ejemplo, la búsqueda continúa desde siguiente personaje en lugar de desde el final del partido anterior. De acuerdo con esta función, aaaa contiene Tres ocurrencias de la subcadena aano dos

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"));

Salida:

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

12
2017-12-06 15:34



Es mejor usar substr_count . Verifique en php.net


9
2017-11-14 11:42



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

6
2018-03-08 15:32



Utilizar preg_match_all encontrar todas ocurrencias.

preg_match_all('/(\$[a-z]+)/i', $str, $matches);

Para mayor referencia de verificación este enlace.


3
2018-04-01 04:04



Esto se puede hacer usando Strpos () función. El siguiente código se implementa usando for loop. Este código es bastante simple y bastante directo.

<?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 />";
}

?>

2
2018-02-04 16:56