Pregunta:
Fecha: 23-04-2019 08:52:17
(En Español)
Funciona correctamente pero solo me halla las primeras coincidencias, es decir si se me repite una palabra en la cadena de texto no la va a encontrar, alguna sugerencia ?
si ejecuto me responde con esto
pero si notan en la cadena a CuerpoDelCorreoTxt la palabra clave BL: se repite 2 veces Votos: 0 - Respuestas: 3 - Vistas: 8 Compartir en: Google Facebook Twitter LinkedIn Link
Reconocer posiciones de palabras clave repetidas en una cadena te texto[Resuelta]
Hola que tal tengo el siguiente códigoFunciona correctamente pero solo me halla las primeras coincidencias, es decir si se me repite una palabra en la cadena de texto no la va a encontrar, alguna sugerencia ?
$CuerpoDelCorreoTxt = "BL:859447 Hola buenos días BL:454545 FechaEta:12/12/019 Factura:094740 Pedido:43893.
Cordialmente.
ALEXANDER O.
";
$PalabrasClaveArray = array('BL:', 'bl:', 'Factura:', 'FechaEta:', 'fechaeta:', 'Pedido:', 'pedido:', 'FIN', 'fin', 'Fin');
foreach ($PalabrasClaveArray as $PalabrasClave) {
$posicionPalabraClave = strpos($CuerpoDelCorreoTxt, $PalabrasClave);
if ($posicionPalabraClave !== false) {
echo $posicionPalabraClave . "=$PalabrasClave</br>"; #
}
}si ejecuto me responde con esto
0=BL: 58=Factura: 39=FechaEta: 73=Pedido:
pero si notan en la cadena a CuerpoDelCorreoTxt la palabra clave BL: se repite 2 veces Votos: 0 - Respuestas: 3 - Vistas: 8 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 23-04-2019 12:04:29 Hola Bryan
Te dejo un codigo experimental con el cual podrás hacer pruebas y ajustarlo a tus necesidades
<?php function contar_palabras($cadena, $palabraBuscada){ return count(explode($palabraBuscada,$cadena))-1; } // Modo de empleo: $CuerpoDelCorreoTxt = "BL:859447 Hola buenos días BL:454545 FechaEta:12/12/019 Factura:094740 Pedido:43893. Cordialmente. ALEXANDER O. "; $palabraBuscada = 'BL'; echo contar_palabras($CuerpoDelCorreoTxt, $palabraBuscada); // Resultado: 2
Otro codigo de ejemplo:
<?php $CuerpoDelCorreoTxt = "BL:859447 Hola buenos días BL:454545 FechaEta:12/12/019 Factura:094740 Pedido:43893. Cordialmente. ALEXANDER O. "; $palabraBuscada = 'BL'; echo "La palabra '$palabraBuscada' se repite: " . substr_count($CuerpoDelCorreoTxt,$palabraBuscada) . " veces<br>"; // Resultado: La palabra 'BL' se repite: 2 veces ?>
Puedes ver la doc de esta funciones de PHP:
str_word_count()
substr_count()
Es lo que se me ocurre hacer rápidamente. Seguro que habrá alguna manera más eficiente de hacerlo.
Saludos Votos: 2 - Link respuesta -
Fecha: 23-04-2019 12:20:13 Hola Bryan,
Usas la función equivocada. strpos te devuelve la primera posición de la palabra que buscas, nunca te va a devolver las siguientes.
Yo utilizaría expresiones regulares.
Modifique tu código un poco para aplicarle algo de formato estándar y darte un ejemplo:
<?php $cuerpoDelCorreoTxt = "BL:859447 Hola buenos días BL:454545 FechaEta:12/12/019 Factura:094740 Pedido:43893. Cordialmente. ALEXANDER O. "; $palabrasClave = '/(bl|factura|fechaeta|pedido):/mi'; $resultados = null; $encontrados = preg_match_all($palabrasClave, $cuerpoDelCorreoTxt, $resultados, PREG_OFFSET_CAPTURE); if ($encontrados !== false) { foreach($resultados[0] as $resultado) { echo "{$resultado[0]} = {$resultado[1]}" . PHP_EOL; } }Votos: 3 - Link respuesta -
Fecha: 23-04-2019 15:34:06 Muchas gracias, excelente ayuda, Walter Sánchez me gusto tu función pero realmente quiero extraer los datos que están seguido del Valor o palabra clave a buscar tu función me sirve para validar información.
Ernesto Peimbert me funcionó a la perfección estaba intentándolo así:
$lastPos = 0; $positions = array(); while (($lastPos = strpos($CuerpoDelCorreoTxt, $PalabraClave, $lastPos)) !== false) { $positions[] = $lastPos; $lastPos = $lastPos + strlen($PalabraClave); } foreach ($positions as $posicionPalabraClave) { InsertarPosiciones($PalabraClave, $posicionPalabraClave, $idMensaje, 3); }
La palabra clave la traigo en una consulta individual Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
