Estoy obteniendo datos de un archivo de texto. ¿Cómo puedo obtener el valor entre los dos delimitadores, es decir, | basado en el partido. Los primeros 7 caracteres forman parte del id.
Ejemplo de entrada:
0123456|BHKAHHHHkk|12345678|JuiKKK121255 9100450|HHkk|12348888|JuiKKK10000000021sdadad255 Resultado deseado: BHKAHHHHkk basado en el valor 0123456 = searchfor
Mi guión:
$file = 'file.txt'; // the following line prevents the browser from parsing this as HTML. header('Content-Type: text/plain'); // get the file contents, assuming the file to be readable (and exist) $contents = file_get_contents($file); // escape special characters in the query $txt = explode("\n",$contents); $counter = 0; foreach($txt as $key => $line){ $subbedString = substr($line,2,6); // $searchfor = '0123456'; //echo strpos($subbedString,$searchfor); if(strpos($subbedString,$searchfor) === 0){ $matches[$key] = $searchfor; echo "<p>" . $matches[$key] . "</p>"; $counter += 1; if($counter==10) break; }La función preg_match se puede usar para este propósito y hace que su código sea muy simple y legible.
Cada fila de datos comienza con \n o el inicio del contenido, por lo que se usa \n|^ para el comienzo del patrón; También ?: se usa para evitar incluir esta parte en la variable $matchs .
Cada fila de datos termina con \n o el final del contenido, por lo que se usa \n|$ para el final del patrón; \r puede aparecer o no (?:\r?\n|$) usado al final.
La variable $searchfor puede estar directamente en el patrón.
\|([^\n]+) busca delimitadores y el resto de datos de línea.
Al final, se puede acceder al segundo parámetro de los datos (que está buscando) en la variable $matchs[1] y al resto de los datos en la variable $matchs[2] .
<?php $contents = '0123456|BHKAHHHHkk|12345678|JuiKKK121255 9100450|HHkk|12348888|JuiKKK10000000021sdadad255'; $searchfor = '9100450'; if(preg_match('/(?:\n|^)' . $searchfor . '\|([^|]+)(.*?)(?:\r?\n|$)/is', $contents, $matchs)) { $second_value = $matchs[1]; $reset_values = $matchs[2]; echo "Result for searching <b>$searchfor</b> is <b>$second_value</b> and reset of data is <b>$reset_values</b>"; } else echo('Not Found :('); ?>El uso de expresiones regulares funciona para mí:
$input = '0123456|BHKAHHHHkk|12345678|JuiKKK121255 9100450|HHkk|12348888|JuiKKK10000000021sdadad255'; $searchfor = '12348888'; $regexp = "/(?<=" . $searchfor . "\\|)\\w+/m"; $result = preg_match_all($regexp, $input, $matches); print_r($matches);Producción:
/*Array ( [0] => Array ( [0] => JuiKKK10000000021sdadad255 ) )*/