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

zero-cool

Preg_match repetido

5 mensagens neste tópico

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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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>');


?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Obrigado pelo código e pela organização total dos dados.

Não era propriamente esse o caso, mas já adaptei.

Obrigado

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