Jump to content

Remover alguns caracteres


kenny
 Share

Recommended Posts

Boas Pessoal.

Eu queria saber como posso remover alguns caracteres numa string.

Exemplo:

a. ola <123>
b. ola <432>
a. ola <12345>

E eu queria que só aparece se o "ola" que é o nome.

Atrás do nome só pode ter "a." ou "b." nada mais e a frente pode ter "<números>" como posso remover isto?

Obrigado e Cumprimentos

Link to comment
Share on other sites

Sim os espaços aparecem sempre e o problema é que o nome pode conter numeros e outros caracteres. Ou seja eu só queria remover o "a. " e o "b. " antes do nome e depois remover o que fica a frente do nome a seguir ao caracter "<"

Edited by kenny
Link to comment
Share on other sites

@Yoda nao funcionou porque apaga os espaços todos e se o nome conter espaço só fica a aparecer o primeiro nome.

@chbcl eu tenho algo assim:

<?php
while($result = mysql_fetch_assoc($query)) {

$caracters = array("a. ", "b. ", "<", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ">");
$nome = str_replace($caracters, "", $result['name']);
?>

<tr>
<td> <b><?php echo $nome; ?></b></td>
</tr>

Só que o problema é imaginando que me aparece na Base de Dados um nome como "a. T3st3 | Ol4 <3891>" eu queria que aparece se só a parte do "meio" ou seja o "T3st3 | Ol4" mas com o código que tenho remove os numeros todos da string. Não sei se me fiz entender.

Atrás do nome só pode aparecer "a. " ou "b. " como já tinha referido e a frente vai aparecer os numeros "<125>" por exemplo. E eu queria só o nome mesmo que esse contenha caracteres especias ou numeros e espaços.

@HappyHippyHippo

Desculpa mas não percebi muito bem o teu código faço echo a que para depois exibir o nome "match[1]" ?

É que removeu me o nome todo e apareceu me dividido em array. E "match[1]" aparece me só a primeira letra do nome.

Eu já tive assim o código:


$nome = $sting['name']; stringRemove("a. ","b. ",$nome,"<",">"); ?

E funcionou só já nao sei é da função stringRemove que tinha. 😕 :confused:

Link to comment
Share on other sites

Consegui de uma maneira nao sei se será a mais básica mas funcionou. 🙂

Deixei o meu código assim:

<?php
$caracters = array("a. ", "b. ");

$nome = str_replace($caracters, "", $string['name']);

$nome = explode("<", $nome)
?>

<tr>
<td> <b><?php echo $nome[0]; ?></b></td>
</tr>

Será que foi a melhor maneira ?

@bioshock

Obrigado essa maneira parece ser é mais complicada e mais trabalhada se tiver que fazer isso em duas ou mais strings é que torna se um pouco maior o código mas a minha maneira funcionou bem penso que nao devo ter mais problemas.

Se calhar o ideal seria uma função externa para remover tudo como eu tinha na solução que já utilizei uma vez só nao sei é da função.

Obrigado a todos pela ajuda 👍👍

Edited by kenny
Link to comment
Share on other sites

Desta forma resulta e deixa o valor neste caso = T3st3 | Ol4

<?php
$texto = "a. T3st3 | Ol4 <3891>";
$texto = substr($texto, 3, strlen($texto));

$string = "";
$letra = str_split($texto);
$i = 0;
while($letra[$i] != '<'){
 $string .= $letra[$i];
 $i++;
}
print_r($string); // resultado!
?>
Edited by chbcl

developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Link to comment
Share on other sites

Será que foi a melhor maneira ?

O problema do teu código e de outros é que estás restrito. Obrigatoriamente o teu código tem de ter um "a." ou um "b." e obrigatoriamente tem de ter um "<". Se, por ventura, mais tarde precisares de adicionar mais informação / alterar o "protótipo" o teu parse já terá problemas.

Com o meu código podes perfeitamente alterar as variantes "a. ; b." e "<123>" para os valores que pretenderes.

Edited by bioshock
Link to comment
Share on other sites

O problema do teu código e de outros é que estás restrito. Obrigatoriamente o teu código tem de ter um "a." ou um "b." e obrigatoriamente tem de ter um "<". Se, por ventura, mais tarde precisares de adicionar mais informação / alterar o "protótipo" o teu parse já terá problemas.

Com o meu código podes perfeitamente alterar as variantes "a. ; b." e "<123>" para os valores que pretenderes.

Pois mas o que eu queria mesmo era remover o "<123>" pois a frente do nome só pode aparecer "<numeros>" o unico problema era se alguem utiliza se um nome com numeros (T3st3) com o código que pus deixa na mesma aparecer os numeros no nome. A parte do "a. " e "b. " tbm fica resolvida com o str_replace. Mas algum problema que tenha com nomes que possam aparecer de certeza que vou usar as opções que me foram dadas aqui.

Mais uma vez muito obrigado pela vossa ajuda.

Link to comment
Share on other sites

como disse no meu post .. foi deito de cabeça.

aqui fica uma solução a funcionar correctamente:

<?php
$test = array("a. ola <123>",
             "b. ola <12353>",
             "b. ola ali<12353>",
             "b. <12353>");

foreach ($test as $string) {
   preg_match("/(?<=(a|b)\.)[^\<]*/", $string, $match);
   if (count($match) > 0 && strlen(trim($match[0])) > 0)
       echo "match : ".$match[0]."<br />";
}
?>

resultado:

match : ola 
match : ola 
match : ola ali
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.