PCRE и русские символы :(

D4RK 4NG3L

Новичок
У меня в скрипте прописано так:
PHP:
$playername = $_REQUEST['playername'];
У меня register_globals отключена.
Собаку поставлю позже, когда скрипт полностью написан будет, чтоб пользователи не жаловались о куче сообщений.
___
Так же в php.ini display_errors выставленна в значение E_ALL
 

SiMM

Новичок
D4RK 4NG3L, по барабану, что у тебя в скрипте прописано.

> Собаку поставлю позже
Её вообще ставить не надо. Никогда. Потому что
> чтоб пользователи не жаловались о куче сообщений
нужно писать скрипты так, чтобы их не было, и подстраховываться от них не собаками, а специально предназначенными мерами.

> Так же в php.ini display_errors выставленна в значение E_ALL
Ну и что? По твоему, установка этой опции и есть отладка? Это необходимое, но не достаточное условие. Прочтите наконец FAQ. ПОЛНОСТЬЮ. ОСМЫСЛЕННО. И следуйте указаниям.
 

D4RK 4NG3L

Новичок
Всё прочёл, попробовал... Переменна
PHP:
$playername
имеет своё значение, которое и должно быть. Пробовал с регулярным выражением:
PHP:
print "#$playername\sувернулся от удара\sв\s([а-я]+)#is";
Выводится то, что нужно, т.е. значение переменной
PHP:
$playername
Всё равно ничего не получается, просто не могу понять что не так.
 

SiMM

Новичок
Отладка состоит из двух основных компонентов:
1. Максимально упрощать пример. Если у вас не работает программа, которая рисует форму,получает данные, записывает данные формы в базу и вывдит их снова, то разбейте программу на составляющие и выполняйте по очереди.
Если у вас не работает сложная подпрограмма определения работоспособности кук - напишите сначала тест в две строчки чтобы убедиться, что вы хотя бы можете выставлять и читать куку.
2. Вывод отладочной информации.
Проверяйте значение КАЖДОЙ переменной! Каждого значения, возвращаемого функцией!
Я не вижу здесь (в форуме) максимальноупрощённого, воспроизводимого, рабочего примера на 3-5 строк, который я могу запустить на своём компьютере и собственными глазами убедиться, что оно действительно не работает. Я понятия не имею, что такое $playername и что в нём содержится (я конечно могу опять стелепатировать - [m]preg_quote[/m] - но почему я должен это делать?). Я понятия не имею, что такое и чему равны $fight_log и $par - я не стою со свечкой у тебя за спиной.
Так что будь добр, задавай вопросы так, чтобы на них МОЖНО было ответить, не занимаясь ВЫПЫТЫВАНИЕМ деталей дела. Помощь нужна тебе - только непонятно, почему кто-то должен мучиться, чтобы тебе её оказать?
 

D4RK 4NG3L

Новичок
Так всё теперь ясно, вот всё в упрощённом варианте, и с подробнейшими комментариями:
PHP:
$playername = $_REQUEST['playername'];
$fight_log = $_REQUEST['fight_log'];
$fight_log = file_get_contents($fight_log);
if(preg_match("#$playername#ixs", $fight_log))
{
        if(preg_match_all("#$playername\sувернулся от удара\sв\s([а-я]+)#is", $fight_log, $par, PREG_SET_ORDER))
        {
                print "<br>Увороты есть!<br>";
                $c_par = count($par);
                print $c_par;
        }
}
else
{
        print "Пресонаж ". $playername ." в бою не участвовал";
}
....
где:
$par - массив в который записываются все совпадения с регулярным выражением.
$fight_log - Переменная содержащая лог боя, отправленный через форму.
$c_par - количество элементов содержащихся в массиве $par
$playername - имя бойца, поступает также через форму, его удары, блоки и т.д. мы и анализируем.
___________

Надеюсь объяснил всё))
 

SiMM

Новичок
D4RK 4NG3L, не нужны тут никому комментарии. Ну неужели сложно сделать, как надо? А я вот тоже щас скажу - твой скрипт у меня нифига не работает. От тебя требовалось 3-5 строчек типа
PHP:
$playername = "Вася Пупкин";
$fight_log = array("строка 1\n","строка 2\n");
var_dump(preg_match("#$playername#ixs", $fight_log));
var_dump(preg_match_all("#$playername\sувернулся от удара\sв\s([а-я]+)#is", $fight_log, $par, PREG_SET_ORDER));
print_r($par);
с описанием, что не так. А ты тут войну и мир написал, при чём пару важных глав вообще куда-то выбросил.
 

D4RK 4NG3L

Новичок
Пишу:
PHP:
$playername = "validol";
$fight_log = "11:36 Орк пытался поразить соперника, но validol увернулся от удара в голову. validol заблокировал удар от Орк в торс.";
var_dump(preg_match("#$playername#ixs", $fight_log)); 
var_dump(preg_match_all("#$playername\sувернулся от удара\sв\s([а-я]+)#is", $fight_log, $par, PREG_SET_ORDER)); 
print_r($par);
__
Так пойдёть??
 

SiMM

Новичок
> Так пойдёть??
А чем ты недоволен-то?
Код:
int(1)
int(1)
Array
(
    [0] => Array
        (
            [0] => validol увернулся от удара в голову
            [1] => голову
        )
)
Всё работает ожидаемым образом.
 

D4RK 4NG3L

Новичок
Вот, всё получилось большое спасибо для SiMM. Также хочу перед ним извениться за небольшие понты на Искодниках.Ру
Было плохое настроение.
 
Сверху