Ir para o conteúdo
zero-cool

Preg_match repetido

Mensagens Recomendadas

zero-cool

Viva,

Estou a tentar aplicar este código

preg_match_all("/username[ ]*[=:]*[ ]*([^\|]*)[\|]*password[ ]*[=:]*[ ]*([^\|]*)/i",$t,$o[]);
preg_match_all("/username[ ]*[=:]*[ ]*([^\|]*)[\|]*pass[ ]*[=:]*[ ]*([^\|]*)/i",$t,$o[]);

Mas não estou a conseguir que funcione bem. Por exemplo:

$t = "username=aaaau||password=aaaap||||username=bbbbu||pass=bbbbp||"

Output $o:
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => username=aaaau||password=aaaap
                )

            [1] => Array
                (
                    [0] => aaaau
                )

            [2] => Array
                (
                    [0] => aaaap
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => username=aaaau||password=aaaap
                    [1] => username=bbbbu||pass=bbbbp
                )

            [1] => Array
                (
                    [0] => aaaau
                    [1] => bbbbu
                )

            [2] => Array
                (
                    [0] => word=aaaap
                    [1] => bbbbp
                )

        )

O "aaaau" não deveria aparecer no segundo, pois é puramente do primeiro caso. Já dei voltas e voltas a isto e não consigo impedir que isto aconteça.

Como resolvo isto?

Cumprimentos,

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cyclop

Antes de mais se estás com ideias de usar regex, convem teres um texto de origem padrão... ser um padrão...

visto que não tem qualquer lógica o texto que tentas tratar, ora de um lado é pass outro é password... quatro barras a delimitar noutro é duas....

dá um exmeplo prático rapaz, talvez tenhamos uma melhor forma de resolver o teu problema.


"Quando eu for grande quero ser como o Celso"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zero-cool

Antes de mais se estás com ideias de usar regex, convem teres um texto de origem padrão... ser um padrão...

visto que não tem qualquer lógica o texto que tentas tratar, ora de um lado é pass outro é password... quatro barras a delimitar noutro é duas....

dá um exmeplo prático rapaz, talvez tenhamos uma melhor forma de resolver o teu problema.

Este é o exemplo prático...

É "username=<username>||password=<password>||||...."

No entanto tanto pode ser usado "=" como ":", e podem haver espaços entre estes simbolos. Além disso, as palavras username e password podem variar, e interessa-me separar os diferentes casos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cyclop

Simplifiquei-te o codigo de maneira a ficares depois com uma array com todos os logins e passwords

Aqui vai um exemplo:

<?
$sText = "username=user1||password=pass1||||username=user2||password=pass2||||username:user3||password:pass3||||username=user4||password=pass4";
$aMatches = array();


$aRows = explode('||||', $sText); //como se sabe que o delimitador de registo é |||| não vale a pena usar expressões regulares neste caso
$aResult = array();
foreach ($aRows as $sRow) //itera-se cada registo
{
    $aMatches = array();
    if (preg_match('#username[:=](.*)\|\|password[:=](.*)#i', $sRow, $aMatches)) //verifica se tem um value valido usando a regex
        $aResult[] = array('login' => $aMatches[0x1] , 'password' => $aMatches[0x2]); //incrementa-se um array no resultado final
} //end foreach $aRows


//faz-se o output 
echo ('<br><br><h1>Result</h1><br>');
echo ('<pre>');
echo ("\n--------------------------------------------------------\n");
print_r($aResult);
echo ("\n--------------------------------------------------------\n");
echo ('</pre>');


?>


"Quando eu for grande quero ser como o Celso"

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.