KiNgPiTo Posted January 5, 2010 at 06:57 PM Report Share #304281 Posted January 5, 2010 at 06:57 PM Boas pessoal 😉 O titulo está confuso, mas eu passo a explicar... Imaginamos esta string: $varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas"; O que eu queria era passar para um array as palavras que por exemplo começam por "fra", ou seja neste caso o Array seria: $array[0] = "frase"; $array[1] = "fracas"; $array[2] = "fracotas"; $array[3] = "fraquinhas"; Alguém me pode ajudar? Muito obrigado 😉 Link to comment Share on other sites More sharing options...
cyclop Posted January 5, 2010 at 07:26 PM Report Share #304286 Posted January 5, 2010 at 07:26 PM Regular expression por fra[^\s]* deve de resultar... "Quando eu for grande quero ser como o Celso" Link to comment Share on other sites More sharing options...
softklin Posted January 5, 2010 at 07:34 PM Report Share #304288 Posted January 5, 2010 at 07:34 PM Tinha em ideia fazeres um explode da string pelos espaços, e depois usar o array_filter para "limpar" o array: $varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas"; $vector = explode(" ", $varaux); Depois crias uma função de filtro e passas à função array_filter como callback: function palavrasComFra($w) { return (strpos($w, "fra") == 0); } $vector = array_filter($vector, "palavrasComFra"); O problema disto é que preserva vírgulas, pontos, etc., não sei se será um inconveniente. Não testei, btw. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
KiNgPiTo Posted January 6, 2010 at 10:57 AM Author Report Share #304422 Posted January 6, 2010 at 10:57 AM Regular expression por fra[^\s]* deve de resultar... Nunca mais me lembrei do preg_match... Uma solução um bocado rápida que fiz foi: <?php $varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas"; $array = explode(" ", $varaux); //Separa por espaços e adiciona a um array... $array2 = array(); //Inicializa o novo array echo 'Palavras inicias por "fra":<br /><br />'; for ($i=0; $i < sizeof($array); $i++ ){ if ( preg_match( "/^fra/", $array[$i] ) ) // Se começarem por "fra" $array2[] = $array[$i]; //Adiciona ao novo array a posicao cujo valor corresponde a condição } echo '<pre>'; print_r($array2); //Imprime o novo array para testar... echo '</pre>'; ?> Funciona bem assim... Tinha em ideia fazeres um explode da string pelos espaços, e depois usar o array_filter para "limpar" o array: $varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas"; $vector = explode(" ", $varaux); Depois crias uma função de filtro e passas à função array_filter como callback: function palavrasComFra($w) { return (strpos($w, "fra") == 0); } $vector = array_filter($vector, "palavrasComFra"); O problema disto é que preserva vírgulas, pontos, etc., não sei se será um inconveniente. Não testei, btw. O $vector devolve todas as palavras e não as filtradas... Sinceramente não percebi o teu método mas fiquei curioso, se me poderes explicar melhor 😉 Muito Obrigado a ambos 😉 Link to comment Share on other sites More sharing options...
cyclop Posted January 6, 2010 at 11:22 AM Report Share #304424 Posted January 6, 2010 at 11:22 AM Quando falava em Regex, falava em preg match all, não é preciso iterar e muito mais simples..... <? $varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas"; $matches = array(); preg_match_all('#fra[^\s\t]*#i',$varaux,$matches); echo ('<br><br><h1 style="color:#FF0000; background-color:#FFFFFF;">$matches</h1><br>'); echo ('<pre>'); echo ("\n--------------------------------------------------------\n"); print_r($matches); echo ("\n--------------------------------------------------------\n"); echo ('</pre>'); ?> "Quando eu for grande quero ser como o Celso" Link to comment Share on other sites More sharing options...
softklin Posted January 6, 2010 at 11:35 AM Report Share #304427 Posted January 6, 2010 at 11:35 AM Tinha um problema na função de filtro, como o PHP considera 0 como um inteiro ou nulo, logo a condição retornava sempre verdadeiro para qualquer caso (encontrasse um valor ou não). Uma verificação estrita do tipo de dados resolve o problema: function palavrasComFra($w) { return (strpos(strtolower($w), "fra") === 0); } Também corrigi para o caso de começar com uma maiúscula. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. 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