функция preg_match_all()

Discussion in 'PHP' started by stite, 21 Dec 2010.

  1. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    PHP:
    $type=2;
    $logins[$type]=array('email''mail''user''name''login''username');


                     for(
    $l=0;$l<count($logins[$type]);){
                echo 
    $logins[$type][$l].":";
                
    preg_match_all("#<input.*name=[\",']([^<]*{$logins[$type][$l]}[^<]*)[\",'].*>#isU"$site$username);
                
    $pos_un=stripos($username[1][0], $logins[$type][$l]);
                if(empty(
    $pos_un))$l++; else break;
            }
    preg_match_all не видит в переменной $logins[$type][$l] слово login, но слово там есть. проверял через echo который находится в цикле:
    PHP:
    for(...){
    echo 
    $logins[$type][$l].":"
    ...
    }
    echo показывает все значения массива, которые перебирает цикл, в итоге на странице браузера выводится: email:mail:user:name:login:username:
    preg_match тоже по всему видимому работает правильно, так как если ввести:
    PHP:
    <input.*name=[\",']([^<]*login[^<]*)[\",'].*> 
    тоесть просто слово login вместо $logins[$type][$l], то в username[1][0] сохраняется именно то что требуется. тоесть прег находит всё правильно. В чем же дело? в чем отличается $logins[$type][$l] хранящая в себе слово login от слова login?

    для сведения:
    я пробовал записывать прегу по разному:
    и так:
    PHP:
    <input.*name=[\",']([^<]*".$logins[$type][$l]."[^<]*)[\",'].*>
    и так .*:
    PHP:
    <input.*name=[\",'](.*".$logins[$type][$l].".*)[\",'].*>
    и без .*:
    PHP:
    <input.*name=[\",'](".$logins[$type][$l].")[\",'].*>
    вобщем по всякому..
     
    #1 stite, 21 Dec 2010
    Last edited: 21 Dec 2010
  2. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    PHP:
    echo "#<input.*name=[\",']([^<]*{$logins[$type][$l]}[^<]*)[\",'].*>#isU";
    и смотри чем отличается
     
  3. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    непонял
    получилось вот что : #<]*[^<]*)[",'].*>#isU#<]*[^<]*)[",'].*>#isU
     
    #3 stite, 21 Dec 2010
    Last edited: 21 Dec 2010
  4. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    смотри исходник страницы
    Всё нормально работает, но зачем парсить имя input'a которое, сам и задаёшь....
     
  5. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    я еще поставил ".*" (или [^<]*)по бокам, то есть инпут может содержать в своем имени помимо своего полного имени еще и часть того что я задал. например formname или userlogin ну или ?act=login(но это в случае form action)

    кстати исходный код получился таким:
    PHP:
    #<input.*name=[",']([^<]*[^<]*)[",'].*>#isU#<input.*name=[",']([^<]*[^<]*)[",'].*>#isU
    он не видит и не читает $logins[$type][$l], странно, почему?
     
    #5 stite, 21 Dec 2010
    Last edited: 21 Dec 2010
  6. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Выложи исходник страницы.
    Что-то не очень понятно =\
     
  7. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    исходник той страницы, которую я прег_матч_алл'ю? вот: mail.ru
    вот тот самый фрагмент кода:
    PHP:
    ..............
    <
    tr>
                        <
    td class="login"><input type="text" class="long" size="10" name="Login" tabindex="3" value="" /><div>&nbsp;</div></td>
    ...
    ...
    ...
    ...
    ...

                        <
    td><input type="password" class="long" size="15" name="Password" tabindex="5"
    value="" /></td>
    ...........
    password я нахожу через type, а не name
     
    #7 stite, 21 Dec 2010
    Last edited: 21 Dec 2010
  8. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    всё, почти полностью поменял свой код и заработало, не знаю почему но теперь всё работает
    сенькс за ответы