[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHPегулярные выражения
blase
не понимаю почему не работает, если всё правильно и оно должно работать.
вобщем поставьте диагноз и скажите в чем дело)):

preg_match_all("#<input.*name=\"(.*{$logins[$type][$l]}.*)\".*>#isU", $site, $username);

в в скобках находится слово "user" (т.е. в переменной $logins[$type][$l] находится слово "user")
но в $username[1][0] в итоге пустой. тоесть не находит он там такого слова
а если написать так:
preg_match_all("#<input.*name=\"(.*user.*)\".*>#isU", $site, $username);

то выводит всё правильно. почему??

я пробовал по разному записывать то что в скобках:
(.*?{$logins[$type][$l]}.*?)
(.*
{$logins[$type][$l]}.*?)
([^<]*
{$logins[$type][$l]}[^<]*)
(.*
{$logins[$type][$l]}[^<]*)
даже просто вот так:
(
{$logins[$type][$l]})

но ничего не помогает. В чем же дело?



$logins[$type][$l] я проверял через echo, там есть слово user;
вот по-подробнее код:
  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;
}echo $logins[$type][$l]."!".$username[1][0];

где $type=0
и $logins[$type]=('user', 'name', 'login', 'username' и т.д.)
а в переменной $site:

<input type="text" name="user" size="10" />

<
input type="password" name="passwrd" size="10" />
<
input type="submit" value="Войти" />
<
input type="hidden" name="hash_passwrd" value="" />



вместо слова "user" - preg_match_all почему-то определяет там слово "name" и выводит, после чего dв переменной $username[1][0] находится:
user"  size="10" />



вот это:
  	#echo $logins[$type][$l]."!";

показывает вот что: 'user!name!'
тоесть останавливается на name

а вот это:
echo $logins[$type][$l]."!".$username[1][0];

показывает: 'name!user" size="10" />'+еще поле для ввода



Спустя 5 часов, 20 минут, 46 секунд (18.12.2010 - 23:43) inpost написал(а):
Выводе не в фигурных скобках, а так:
".$logins[][]."

фигурные скобки воспринимаются регуляркой как длина символов перед ней.

Спустя 58 минут, 25 секунд (19.12.2010 - 00:41) blase написал(а):
Цитата (inpost @ 18.12.2010 - 20:43)
Выводе не в фигурных скобках, а так:
".$logins[][]."

а, я так делал, тоже не получается

у меня еще есть второй код, только прег_матч_алл настроен под <form..action="%$logins[][]%" ...
так вот он работает, а написан точно также как и этот, точь в точь одинаково и тоже с фигурными знаками.

щас перепроверил - неполучается

Спустя 21 час, 22 минуты, 8 секунд (19.12.2010 - 22:03) inpost написал(а):
Покажи как ты исправил после моего замечания.

 ! 

М
В смс-ках ссылку нельзя давать!
inpost

Спустя 49 минут, 52 секунды (19.12.2010 - 22:53) Winston написал(а):
Что у тебя находится в $site ? Судя по всему у тебя там присутствуют input'ы, чтобы у тебя в $username[1][0] было совпадение то нужно чтобы в $site был хотя бы один inp с именем которое содержится в $logins[$type][$l]. Может попробуй так:
    for($l=0;$l<count($logins[$type]); $l++){
#echo $logins[$type][$l]."!";
$site .= "<input name={$logins[$type][$l]}'>";
preg_match_all("#<input.*name=\"(.*)\".*>#isU", $site, $username);
$pos_un=stripos($username[1][0], $logins[$type][$l]);
if(empty($pos_un))$l++; else break;
}echo $logins[$type][$l]."!".$username[1][0];

Тогда в $username[1][0..N] будут имена. И почему у тебя в условии цикла нету $l++ ?

Спустя 5 часов, 3 минуты, 41 секунда (20.12.2010 - 03:57) blase написал(а):
Цитата (PHPprogramer @ 19.12.2010 - 19:53)
Что у тебя находится в $site ? Судя по всему у тебя там присутствуют input'ы, чтобы у тебя в $username[1][0] было совпадение то нужно чтобы в $site был хотя бы один inp с именем которое содержится в $logins[$type][$l]. Может попробуй так:
    for($l=0;$l<count($logins[$type]); $l++){
    #echo $logins[$type][$l]."!";
    $site .= "<input name={$logins[$type][$l]}'>";
    preg_match_all("#<input.*name=\"(.*)\".*>#isU", $site, $username);
    $pos_un=stripos($username[1][0], $logins[$type][$l]);
    if(empty($pos_un))$l++; else break;
    }echo $logins[$type][$l]."!".$username[1][0];

Тогда в $username[1][0..N] будут имена. И почему у тебя в условии цикла нету $l++ ?

$l++ в цикле присутствует: if(empty($pos_un))$l++; else break; ,
массив $logins[$type][$l] переберается циклом правильно. это работает.
вот инпуты:
  	<input type="text" name="user"  size="10" />

<input
type="password" name="passwrd" size="10" />
<input
type="submit" value="Войти" />
<input
type="hidden" name="hash_passwrd" value="" />


в промежутке цикла я поставил #echo $logins[$type][$l]."!";
что даёт видеть на странице браузера что цикл правильно и поочередно перебирает слова в массиве(слова менял местами, добавлял множество других), но останавливается он не на user а на name, и в итоге $username[1][0] показывает вот что:
echo $logins[$type][$l]."!".$username[1][0];
user posted image
может ошибка где-то тут?:
$pos_un=stripos($username[1][0], $logins[$type][$l]);
if(empty($pos_un))$l++; else break;


потому что когда просто убрал цикл и перед preg'om поставил просто вот так: $logins[$type][$l]="user", оно срабатывает

Спустя 3 минуты, 10 секунд (20.12.2010 - 04:00) blase написал(а):
Цитата (inpost @ 19.12.2010 - 19:03)
Покажи как ты исправил после моего замечания.
[MOD]В смс-ках ссылку нельзя давать!inpost[/EX]

ок, не знал. больше не буду

> Покажи как ты исправил после моего замечания.
честно-честно я так пробовал и после твоего замечания опять попробовал - не получается

Спустя 4 минуты, 30 секунд (20.12.2010 - 04:04) blase написал(а):
ц))) вот то даю)) оказалось неправильно тут:
if(empty($pos_un))$l++; else break;

изменил на
if(!empty($pos_un))$l++; else break;

то есть опставил "!", и вооля - сработало)

сенькс за ответы! ошибки у меня как всегда из-за невнимательности))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.