Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Общие вопросы по коду

Ответить
Настройки темы

Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


grat1, что-то мне кажется ты чушью занимаешся.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 23:30, 04-05-2010 | #271


Пользователь


Сообщения: 124
Благодарности: 3

Профиль | Отправить PM | Цитировать


Здравствуйте. Никак немгоу понять почему preg_replace экранирует символы, а preg_match нет. Вот пример:
PHP код: Выделить весь код

$string="O' yes";

preg_match("/^(.*)$/i",$string,$array); 
print_r($array); 

, выведет
Код: Выделить весь код
Array ( [0] => O' yes [1] => O' yes )
,но если написать
PHP код: Выделить весь код

$string="O' yes";

preg_replace("/^(.*)$/ei","\$array=\"$1\"",$string);
print_r($array); 

, выведет
Код: Выделить весь код
O\' yes
Я могу конечно использовать preg_match, но мне в качестве входящих паттернов, и строк массивы, так что кроме preg_replace, больше ничего не подходит. Экранирование в php.ini отключено, все три директивы (
magic_quotes_qpc,magic_quotes_runtime,magic_quotes_sybase) выключены. Помогите пожалуйста.

Отправлено: 15:20, 05-05-2010 | #272



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2499
Благодарности: 682

Профиль | Отправить PM | Цитировать


Цитата maasja:
"/^(.*)$/ei" »
флаг e необязателен, и разберитесь с кавычками...
PHP код: Выделить весь код

preg_replace('/^(.*)$/i'$array '="${1}"'$string); 



Отправлено: 15:48, 05-05-2010 | #273


Пользователь


Сообщения: 124
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Sham:
$array*.*'="${1}"' »
ваш пример почему-то у меня не сработал((
В preg_replace я использую модификатор "e", для того чтобы вывести данные из круглых скобок в внешнею переменную. Например в своем приведенном примере выше я переменной array дал значение того что было у круглых скобках ("\$array=\"$1\""). Если вы знаете другой способ вывести информацию та что была в круглых скобках в переменную в preg_replace, то напишите пожалуйста.
По-моему я нашел еще одну свою ошибку.
PHP код: Выделить весь код

$string="O\' yes";
$string2 print_r($string,true);
echo 
$string2

- это выведет так как и должно быть, то есть
Код: Выделить весь код
O\' yes
, но если написать вместо print_r var_export, то оно выведет
Код: Выделить весь код
'O\\\' yes'
, почему оно экранирует?

Отправлено: 18:17, 05-05-2010 | #274


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


JON4, здраствуйте. С такими запросами лучше на фриланс-биржу.
1 Можно, форум ставится отдельно.
2 Это более конкретно, но я не могу дать конкретный совет. А примерно, - нарисовать заранее нужные цвета. Потом их подкладывать.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:55, 05-05-2010 | #275


Deadooshka


Сообщения: 2499
Благодарности: 682

Профиль | Отправить PM | Цитировать


Цитата maasja:
я использую модификатор "e", для того чтобы вывести данные из круглых скобок в внешнею переменную »
Это другое дело. Ваш вариант не прокатит, ибо при флаге "e" совпадение регулярного выражение в тексте заменяется на тот текст, что возвратится в результате выполнения кода в строке замены. В вашем случае это true/false (результат присвоения переменной), т.е. пустая строка - текст удалится. Чтобы было как надо, нужно сделать функцию, которая выполняет этот код, и возвращает текст обратно. Например.
PHP код: Выделить весь код

function test($text)
{
    global 
$array;

    
$array $text;

    return 
$text;
}

$string preg_replace('/^(.*)$/ie''test(\'${1}\')'$string); 

Код для примера, и так не делается. Для присвоения всех совпадений переменной служит preg_match_all
Цитата maasja:
, но если написать вместо print_r var_export, то оно выведет
Код:
'O\\\' yes' »
var-export - выдает PHP-код, т.е. с экранами служебных символов. Дополнительные слеши нужны для экранирования экрана кавычки.

Цитата maasja:
Я могу конечно использовать preg_match, но мне в качестве входящих паттернов, и строк массивы, так что кроме preg_replace, больше ничего не подходит. »
для массивов существует foreach
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:22, 06-05-2010 | #276


Пользователь


Сообщения: 124
Благодарности: 3

Профиль | Отправить PM | Цитировать


Спасибо!
Цитата Sham:
Ваш вариант не прокатит, ибо при флаге "e" совпадение регулярного выражение в тексте заменяется на тот текст, что возвратится в результате выполнения кода в строке замены. В вашем случае это true/false (результат присвоения переменной), т.е. пустая строка - текст удалится. »
- да, вы правы, но у меня почему-то так работало.... А так вообщем уже разобрался, огромное спасибо!!!

Отправлено: 15:55, 06-05-2010 | #277


Пользователь


Сообщения: 64
Благодарности: 2

Профиль | Отправить PM | Цитировать


Igor_I -согласен -пока что учимя
учу php на простых примерах
после прочтения статьи Тонкости boolean FALSE и конструкции die() в php
у меня появился ? как проверить подключение
PHP код: Выделить весь код

<?php  

$onlineBD 
mysql_connect("localhost""root""");  
//mysql_close($onlineBD);  
?>
<html>
<head><title></title>
</head>
<body>
<?php   
if (!empty($onlineBD)){      
      die(
"ошибка подключения к MySQL");  
}  
else {echo 
"подключенно";  
        }  
?>  
</body>
</html>

mysql_close - закрываю открываю одно и то же сообщение выходит

-------
бета-тестер


Последний раз редактировалось grat1, 07-05-2010 в 04:17.


Отправлено: 04:06, 07-05-2010 | #278


Deadooshka


Сообщения: 2499
Благодарности: 682

Профиль | Отправить PM | Цитировать


Цитата maasja:
- да, вы правы, но у меня почему-то так работало.... »
Цитата maasja:
preg_replace("/^(.*)$/ei","\$array=\"$1\"",$string); »
работает только присвоение переменной (не замена текста), но если есть флаг e, то для строк лучше использовать одинарные кавычки (они не парсятся), тогда экраны не нужны, и совпавший текст будет экранироваться правильно перед вставкой в строку замены.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:39, 07-05-2010 | #279


Пользователь


Сообщения: 124
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Sham:
работает только присвоение переменной (не замена текста) »
Аааа, теперь понял. Мне от входящий строки ничего не нужно, нужно только то что остается в переменной.

А теперь такой вопрос, если я часто использую паттерн(допустим такой:
PHP код: Выделить весь код

$pattern='/(?<=header"><a HREF=")[a-zA-Z\/_]*.[0-9]*\/">([-`#^\[\];|№_~+=!?{}«»@$%&*()\/"\':.,a-zа-яёіїєґ0-9\s]+)(?=<\/a>)/i'

), то имеет ли смысл использовать модификатор "S" - вот его описание: "В случае, если планируется многократно использовать шаблон, имеет смысл потратить немного больше времени на его анализ, чтобы уменьшить время его выполнения. В случае, если данный модификатор используется, проводится дополнительный анализ шаблона. В настоящем это имеет смысл только для фиксированных шаблонов, не содержащих переменных ссылок."
???

Отправлено: 18:19, 08-05-2010 | #280



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Общие вопросы по коду

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - ICQ .:[ все вопросы ]:. Evil Программное обеспечение Windows 712 06-09-2012 17:32
Прочее - Сервер общие вопросы амброзий Сетевые технологии 7 15-07-2008 11:33




 
Переход