kenny Posted June 7, 2014 Report Share Posted June 7, 2014 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 More sharing options...
yoda Posted June 7, 2014 Report Share Posted June 7, 2014 (edited) Aqueles espaços aparecem sempre? E o nome é uma palavra ou podem ser mais? Edited June 7, 2014 by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
kenny Posted June 7, 2014 Author Report Share Posted June 7, 2014 (edited) 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 June 7, 2014 by kenny Link to comment Share on other sites More sharing options...
yoda Posted June 7, 2014 Report Share Posted June 7, 2014 Se esses espaços existem sempre : $parts = explode(' ', $string); echo $parts[1]; // nome before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
kenny Posted June 8, 2014 Author Report Share Posted June 8, 2014 Ainda nao testei assim yoda mas se o nome conter espaços nao vai remover tbm? Se eu tiver algo como "a. Teste.12 | ola <167>" eu queria que no echo mostra se só "Teste.12 | ola" Link to comment Share on other sites More sharing options...
chbcl Posted June 8, 2014 Report Share Posted June 8, 2014 Podias postar aqui um pouco mais do código para se perceber melhor a tua dúvida! developer @ filipealves.net filipealvesbcl [a] gmail.com github.com/filipealvesbcl Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 8, 2014 Report Share Posted June 8, 2014 Testa isto $pattern = "/(?<=(a|b)\.\s)[^\<]/"; preg_match($pattern, $string, $match); var_dump($match); ps : isto foi cabeça por isso nao posso confirmar agora se exactamente assim ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
kenny Posted June 8, 2014 Author Report Share Posted June 8, 2014 @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 More sharing options...
bioshock Posted June 8, 2014 Report Share Posted June 8, 2014 Uma solução mais robusta: $values = "a. Portugal a Programar <123>"; $parts = explode(" ", $values); $nome = $parts[1]; // default if(count($parts) > 3){ for($i = 2; $i < count($parts) - 1; $i++){ $nome .= " " . $parts[$i]; } } echo $nome; Link to comment Share on other sites More sharing options...
kenny Posted June 8, 2014 Author Report Share Posted June 8, 2014 (edited) 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 June 8, 2014 by kenny Link to comment Share on other sites More sharing options...
chbcl Posted June 8, 2014 Report Share Posted June 8, 2014 (edited) 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 June 8, 2014 by chbcl developer @ filipealves.net filipealvesbcl [a] gmail.com github.com/filipealvesbcl Link to comment Share on other sites More sharing options...
bioshock Posted June 8, 2014 Report Share Posted June 8, 2014 (edited) 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 June 8, 2014 by bioshock Link to comment Share on other sites More sharing options...
kenny Posted June 8, 2014 Author Report Share Posted June 8, 2014 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 More sharing options...
HappyHippyHippo Posted June 8, 2014 Report Share Posted June 8, 2014 (edited) 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 June 8, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now