La pregunta es prácticamente lo que dice el título. Tengo una cadena que aumentará su tamaño dinámicamente horas extras. Y puede y tendrá valores repetidos. Necesito encontrar la última ocurrencia de una cadena que está dentro de otras dos cadenas, ya que se genera dinámicamente de una fuente externa, por lo que no sé cuál será la fuente. Pero ahora lo hago donde está y cuáles son las dos cuerdas que lo rodearán.

$myString = "N,Unknown,Anverso,TEST,N,08/06/2021 12:38:31,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido"

Necesito obtener lo que hay en " prueba " (cambiará su valor, como dije, así que no puedo simplemente buscar '' prueba '') .

php
-1
Master 8 jun. 2021 a las 18:48

3 respuestas

La mejor respuesta

Si conoce las dos cuerdas circundantes, Kan determinan fácilmente la posición de la palabra que está buscando.

strrpos() busca la última ocurción de una cadena. Use que para encontrar la posición de la primera palabra conocida. Agregue la longitud de esa palabra y usted sabe dónde comienza la palabra Word.

Haga lo mismo para la segunda palabra conocida, y use substr() para recuperar la palabra que está buscando.

$myString = "N,Unknown,Anverso,TEST,N,08/06/2021 12:38:31,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido";

$known1 = 'Anverso';
$known2 = 'N';

$position1 = strrpos( $myString, $known1 ) + strlen( $known1 );
$position2 = strrpos( $myString, $known2, $position1 );

$word = substr( $myString, $position1, $position2-$position1 );

echo $word;

Salida: ,TEST,; Puedes agregar las comas a las palabras conocidas si no los quieres en el resultado.

0
Michel 8 jun. 2021 a las 16:21

Si conoce las cuerdas circundantes, puede hacer esto. Divide la cadena por coma, la invierte, encuentra la primera aparición de la segunda cadena de búsqueda, las pruebas para ver si los índices del artículo 2 después de la primera cadena de búsqueda, luego devuelve el resultado.

<?php
// example code
$insideof = ["Anverso","N"];
$myString = "N,Unknown,Anverso,TEST,N,08/06/2021 12:38:31,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido";
$arr = array_reverse(explode(",",$myString));
$ind = 0;
$keyword='';
foreach ($arr as $a) {
    if (trim($a) == $insideof[1] && trim($arr[$ind+2]) == $insideof[0]) {
        $keyword = trim($arr[$ind+1]);
        break;
    }
    $ind++;
}

print_r($keyword);

https://www.tehplayground.com/mceuykfqde0lcyv7

0
Kinglish 8 jun. 2021 a las 16:35

Usa Strroppos ()

https://www.php.net/manual/en/function.strrpos.php

$myString = "N,Unknown,Anverso,TEST,N,08/06/2021 12:38:31,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:53,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido N,Unknown,Anverso,TEST,N,08/06/2021 12:38:56,Desconhecido";

$positionOfLastTest = strrpos( $myString, 'TEST' );

$shortenedString = substr( $myString, 0, $positionOfLastTest );
$positionOfSecondToLastTest = strrpos( $shortenedString, 'TEST );
-2
wetmarble 8 jun. 2021 a las 16:04