• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

-IceBurn-

preg_match - Encontrar várias ocurrências

4 mensagens neste tópico

Tenho estado aqui de volta disto e não tou a conseguir lá chegar...  :hmm:

Um exemplo:

<?php

$texto = "aaa .bbb. ccc .dddddd2. eee .fffffff. gg .hhh. .iiiii. .jj.";

if(preg_match("/((\.){1}([a-z]+|[a-z2]+)(\.){1}){6}/", $texto))
echo "Econtrado";
else
echo "Nao encontrado";

?>

Neste exemplo em concreto, pretendo obter "Encontrado", ou seja, a expressão regular ao encontrar mais de 5 palavras do tipo .blah. dava "Encontrado", caso na string $texto existissem 5 ou menos palavras com a sequencia indicada, então dava "Não encontrado".

Não sei se me fiz entender....

Alguem pode dar uma ajudinha.

Obrigado desde já.  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas nem sequer existem 5 palavras repetidas!!

Não percebi muito bem o que queres encontrar.

É isto? \.[a-z]+\.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@-IceBurn-

Acho que é isto que tu queres

<?php
$texto = "aaa .bbb. ccc .dddddd2. eee .fffffff. gg .hhh. .iiiii. .jj.";

if(preg_match_all("/\.+[\w\d]+\.+/i", $texto, $res ) AND count( $res[0] ) >= 6) {
        echo "Encontrado";
        } else {
                echo "Não encontrado";
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@-IceBurn-

Acho que é isto que tu queres

<?php
$texto = "aaa .bbb. ccc .dddddd2. eee .fffffff. gg .hhh. .iiiii. .jj.";

if(preg_match_all("/\.+[\w\d]+\.+/i", $texto, $res ) AND count( $res[0] ) >= 6) {
        echo "Encontrado";
        } else {
                echo "Não encontrado";
}
?>

É isso mesmo Kingless. Obrigado!  :(

Agora ha ha um outro problema....

Imagina esta string:

$texto = "aaa .bbb. ccc .dddddd2. eee .fffffff. gg .hhh. .iiiii. http://sub.dom.com";

Neste caso iria dar encontrado  :confused:

So preciso de encontrar palavras com esta sequencia .[a-z]. ou seja [:space:]\.[a-z]\.[:space:]  e na palavra pode ou não ter o numero 2 [a-z][2(?)].

Bem, estive a fazer umas alterações e já funciona mais ou menos como eu pretendo.

Fiz assim:

<?php
$texto = "aaa .dddddd. eee .ff. gg .aaaabb. .dd2. .gfhfh. hghf .bbbb2. gg jjj";

if(preg_match_all("/\s\.[\w(2?)]+\./i", $texto, $res ) && count( $res[0] ) >= 6) 
{
echo "Encontrado<br/>";

$texto = preg_replace("/\s\.[\w(2?)]+\./i", "", $texto);
}

echo "$texto";
?>

Portanto, neste caso em concreto daria encontrado, agora o que não estou a conseguir fazer é adicionar espaço (\s) no final da expressão.

Exemplo:

Se na sting estivesse hghf.bbbb. gg tudo bem, não existia um espaço antes do primeiro ponto, logo não contava,

mas neste caso: hghf .bbbb.gg já conta e eu queria que não contasse, visto não haver espaço depois do segundo ponto, só que não tou a conseguir  :(

------------------------------------------------------------------------------------------------------------------------

Ok, esquece, para isto se adaptar às minhas necessidades, acabei por fazer assim:

if(@preg_match_all("/\.[\w(2?)]+\./i", $mess, $res ) && @count( $res[0] ) >= 6) // ANTI SMILIES FLOOD
{
$mess = @preg_replace("/\.[\w(2?)]+\./i", "", $mess);
$mess = @trim($mess);
}

Muito obrigado pela ajuda.  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora