Eliminar subcadenas a partir de un caracter determinado

  • Autor Autor CristJian
  • Fecha de inicio Fecha de inicio
C

CristJian

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos, buenas.

Tengo un problemita, estoy tratando de hacer lo siguiente:

De un formulario envío a otro la siguiente información de ejemplo

"Problema 1: si pepito tiene 53 manzanas y 23 naranjas..."
-área matemática
"La oración tiene sujeto y predicado... etc"
-área lingüística
"Cualquier otra cosa que se les ocurra..."
-otra cosa cualquiera

Lo que estoy tratando de hacer es eliminar las comillas "" y separando por renglones la información, por el momento ya pude eliminar todas las comillas que encuentra, el problema que no puedo hacer es que al momento de dividir la información no puedo eliminar toda la subcadena que comienza a partir del guión ya separada, al momento este es el código que tengo y he probado:

PHP:
$text = $_POST['informacion'];

if ($text) {
  //eliminar comillas
  $comillas = array("“", "”");
  $resultado = str_replace($comillas, "", $text);
} 

if ($resultado) {
    //eliminar subcadena
  $caracter = "―"; 
  $posicion = strpos($resultado, $caracter);
  $dominio = substr($resultado, ($posicion+1), -1 ); 
  //dividir texto
  $texto = preg_split('/\n|\r/', $resultado, -1, PREG_SPLIT_NO_EMPTY);
}
?>

img01.webpimg02.webp
La primera parte si funciona la que elimina las comillas, el problema viene a partir del segundo o no sé bien cómo hacerlo para que primero se separe la información y luego elimine lo que no quiero (la subcadena incluyendo el guión para que no cuente como información a ingresar). Si me pueden agregar por skype cristjian1, o si saben de algún método mejor para hacerlo me sería de gran ayuda amigos.

Saludos cordiales y gracias de antemano 😛8:
 
Última edición:
mmm usa preg_replace("|-(.*)\n|i","",$resultado);

eso elimina lo que comienza con - luego cualquier texto y termina en un salto de linea...
 
Hola cicklow, saludos nuevamente... gracias por ayudarme en un tema anterior 🙂

Estoy intentando modificar el script usando preg_replace pero sigue sin modificarlo, disculpa mi ignorancia ya que soy relativamente nuevo en php :ambivalence: pero ¿exactamente en qué lugar debo ponerlo?
 
Hola cicklow, saludos nuevamente... gracias por ayudarme en un tema anterior 🙂

Estoy intentando modificar el script usando preg_replace pero sigue sin modificarlo, disculpa mi ignorancia ya que soy relativamente nuevo en php :ambivalence: pero ¿exactamente en qué lugar debo ponerlo?

PHP:
<?php
$text = $_POST['informacion'];

if ($text) {
  //eliminar comillas
  $comillas = array("“", "”");
  $resultado = str_replace($comillas, "", $text);
} 
$resultado = preg_replace("|-(.*)\n|i","",$resultado);

if ($resultado) {
    //eliminar subcadena
  $caracter = "―"; 
  $posicion = strpos($resultado, $caracter);
  $dominio = substr($resultado, ($posicion+1), -1 ); 
  //dividir texto
  $texto = preg_split('/\n|\r/', $resultado, -1, PREG_SPLIT_NO_EMPTY);
}
?>

asi :encouragement:
 
Muchas gracias cicklow!!! Eres mi heroe!! jejeje :angel1:

Funciona a la perfección excepto por que queda 1 adicional en el resultado, osea se eliminan todas, menos la última. ¿Qué faltaría por modificar?
 
Muchas gracias cicklow!!! Eres mi heroe!! jejeje :angel1:

Funciona a la perfección excepto por que queda 1 adicional en el resultado, osea se eliminan todas, menos la última. ¿Qué faltaría por modificar?

mmm hace asi, le agrego un salto de linea al texto, asi puede eliminar el ultimo.
PHP:
<?php
$text = $_POST['informacion']."\n"; //agregar salto de linea

if ($text) {
  //eliminar comillas
  $comillas = array("“", "”");
  $resultado = str_replace($comillas, "", $text);
} 
$resultado = preg_replace("|-(.*)\n|i","",$resultado);

if ($resultado) {
    //eliminar subcadena
  $caracter = "―"; 
  $posicion = strpos($resultado, $caracter);
  $dominio = substr($resultado, ($posicion+1), -1 ); 
  //dividir texto
  $texto = preg_split('/\n|\r/', $resultado, -1, PREG_SPLIT_NO_EMPTY);
}
?>
 
[MENTION=9679]cicklow[/MENTION] se puede remplazar el caracter por varios ? onda www??
 
[MENTION=9679]cicklow[/MENTION] se puede remplazar el caracter por varios ? onda www??

yo lo reemplace por vacio (nada)... podes colocarle lo que quieras.. PHP: preg_replace - Manual el preg es para usar expresiones regulares, sino podes usar str_replace (para reemplazar una cadena por otra)
 
Que genial que eres hermano!!! :welcoming: me has ayudado la vida!!! en serio a mi me gusta aprender todo esto de programación, y pasé toda la tarde buscando documentación pero no me daba la cabeza para poder terminarlo pero gracias a tu ayuda funcionó a la perfección!! :love_heart:

Muchas gracias amigo. :encouragement:

¿Me recomendarías algún libro para aprender bien php?
 
Que genial que eres hermano!!! :welcoming: me has ayudado la vida!!! en serio a mi me gusta aprender todo esto de programación, y pasé toda la tarde buscando documentación pero no me daba la cabeza para poder terminarlo pero gracias a tu ayuda funcionó a la perfección!! :love_heart:

Muchas gracias amigo. :encouragement:

¿Me recomendarías algún libro para aprender bien php?
mmm no tengo idea, siempre he usado el sitio php.net o el buscador jejej (stackoverflow.com ayuda siempre)... sino buscar en ingles, eso salva siempre...
 
jaja gracias mi amigo, si hago eso también sólo que por novato no me oriento bien aún cómo hacerlo correctamente del todo; por cierto, ¿el código que está puesto está bien o se puede borrar algo que esté innecesariamente?
 
jaja gracias mi amigo, si hago eso también sólo que por novato no me oriento bien aún cómo hacerlo correctamente del todo; por cierto, ¿el código que está puesto está bien o se puede borrar algo que esté innecesariamente?

PHP:
<?php
$text = $_POST['informacion']."\n"; //agregar salto de linea

if ($text) {
  //eliminar comillas
  $comillas = array("“", "”");
  $resultado = str_replace($comillas, "", $text);
} 
if ($resultado) {
  //eliminar subcadena
  $resultado = preg_replace("|-(.*)\n|i","",$resultado);

  //dividir texto
  $texto = preg_split('/\n|\r/', $resultado, -1, PREG_SPLIT_NO_EMPTY);
}
?>
solo le sacamos el code anterior ke tenias...
 
Muchas gracias amigo, me has ayudado bastante esta noche (acá en Ecuador) jeje

Saludos, un abrazo. :encouragement:
 
Última edición:
PHP:
<?php
$text = $_POST['informacion']."\n"; //agregar salto de linea

if ($text) {
  //eliminar comillas
  $comillas = array("“", "”");
  $resultado = str_replace($comillas, "", $text);
} 
if ($resultado) {
  //eliminar subcadena
  $resultado = preg_replace("|-(.*)\n|i","",$resultado);

  //dividir texto
  $texto = preg_split('/\n|\r/', $resultado, -1, PREG_SPLIT_NO_EMPTY);
}
?>
solo le sacamos el code anterior ke tenias...

Hola cicklow,

Disculpa una última pregunta, cómo podré cambiar el script para seleccionar otro símbolo aparte del guión, por ejemplo corchetes o llaves [] {}?
que se elimine a partir del primer corchete que encuentre, etc.

Saludos 🙂
 
Hola cicklow,

Disculpa una última pregunta, cómo podré cambiar el script para seleccionar otro símbolo aparte del guión, por ejemplo corchetes o llaves [] {}?
que se elimine a partir del primer corchete que encuentre, etc.

Saludos 🙂

lo mismo con preg_replace... en la ayuda de PHP tenes mas info, osea es armar la cadena
PHP:
$resultado = preg_replace("/\[[^)]+\]/","",$resultado); //Elimina todo lo que este entre corchetes...
 
lo mismo con preg_replace... en la ayuda de PHP tenes mas info, osea es armar la cadena
PHP:
$resultado = preg_replace("/\[[^)]+\]/","",$resultado); //Elimina todo lo que este entre corchetes...

Bueno, en realidad me refería como en el primer ejemplo, que se elimine todo lo que encuentre a partir del primer corchete por ejemplo, intenté modificar el script inicial cambiando el "|-(.*)\n|i" por "|[(.*)\n|i" pero me sale un error, tengo entendido que el símbolo "|" significa "o", se podrá agregar en la misma línea otro caracter adicional para que elimine todo como en el primer ejemplo?

Gracias 😉
 
Bueno, en realidad me refería como en el primer ejemplo, que se elimine todo lo que encuentre a partir del primer corchete por ejemplo, intenté modificar el script inicial cambiando el "|-(.*)\n|i" por "|[(.*)\n|i" pero me sale un error, tengo entendido que el símbolo "|" significa "o", se podrá agregar en la misma línea otro caracter adicional para que elimine todo como en el primer ejemplo?

Gracias 😉

el | si es o, pero es ||... y usa \[
|\[(.*)\n|i
 
el | si es o, pero es ||... y usa \[
|\[(.*)\n|i

Muchísimas gracias amigo!! el problema era que no lo ingresaba comentado como texto el corchete jejeje por eso era el error, hice un array para algunos otros símbolos que no deseo, muchas gracias amigo nuevamente 😉

Saludos
 
Muchísimas gracias amigo!! el problema era que no lo ingresaba comentado como texto el corchete jejeje por eso era el error, hice un array para algunos otros símbolos que no deseo, muchas gracias amigo nuevamente 😉

Saludos

en realidad no es comentado... osea preg_replace o cualquera de los preg usan los ( . $ [ { etc como simbolos especiales para ellos, entonces si no vas a usarlo como simbolo especial usar la barra invertida \ para indicarle que lo tome como texto normal y no especial
 
en realidad no es comentado... osea preg_replace o cualquera de los preg usan los ( . $ [ { etc como simbolos especiales para ellos, entonces si no vas a usarlo como simbolo especial usar la barra invertida \ para indicarle que lo tome como texto normal y no especial

muchas gracias amigo, cada vez aprendo más jeje

te sigo en tus post 😉 😛8:

por cierto, según lo que entiendo |\[(.*)\n|i significa que todo (.*) lo que encuentra a partir del caracter \[ hasta un enter o nueva línea \n sería reemplazado por lo que uno quiere, pero estaba buscando en la documentación de php.net pero no encontré que significaba el "i"
 
Atrás
Arriba