$ftext = '1<title>a</title>b<title>2</title>3';
$title_arr = spliti('<title>[^<>]+</title>', $ftext);
Проблема с регулярными выражениями
производится замена с помощью PCRE
Код:
######################################
// vars.php
if(!defined("INDEX"))define("INDEX","http://gb/");
if(!defined("ADMIN_EMAIL"))define("ADMIN_EMAIL","xxx@mail.ru");
$m_on_page=10;
$pages_on_raw=10;
$arg_sizes=array(
"name"=>array(20,true),
"email"=>array(30,false),
"url"=>array(50,false),
"icq"=>array(15,false),
"message"=>array(5000,true)
);
######################################
// vars.php
if(!defined("INDEX"))define("INDEX","http://gb/");
if(!defined("ADMIN_EMAIL"))define("ADMIN_EMAIL","xxx@mail.ru");
$m_on_page=10;
$pages_on_raw=10;
$arg_sizes=array(
"name"=>array(20,true),
"email"=>array(30,false),
"url"=>array(50,false),
"icq"=>array(15,false),
"message"=>array(5000,true)
);
######################################
Теперь файл обработчик:
Код:
######################################
//work.php
$vars_file="vars.php";
$filev=implode("",file($vars_file));
# Поступающие данные в этот файл:
$const=array(
"INDEX"=>"http://blabla.ru",
"ADMIN_EMAIL"=>"email@email.com"
);
$vars=array(
["m_on_page"]=5,
["pages_on_raw"]=20
);
$sizes=array(
["name"]=20,
["email"]=40,
["message"]=6000
);
# Регулярные выражения, которые совсем не пашут...
# P.S.: в рег.выражениях я не мастер, так что прошу не смеятся... :(
foreach($const as $k=>$v) {
$filev=preg_replace('#define\("'.strtoupper($k).'","(.*?)"\)(\x59)?#U','define("'.strtoupper($k).'","'.htmlspecialchars($v).'")',$filev);
}
foreach($vars as $k=>$v) {
$filev=preg_replace('#'.$k.'=(.*?)(\x59)?#iU',($k.'='.htmlspecialchars($v).';'),$filev);
}
foreach($sizes as $k=>$v) {
$v=(int)$v;
$filev=preg_replace('#'.$k.'(.+)=>.*array\(.+?,(.+?)\)(\x44)?#iU',($k."\\0=>array($v,\\1);"),$filev);
}
/*
Надо сделать так, чтобы обрабатывался файл vars.php и его переменные заменялись на те,
которые обозначены во выше написанных массивах... Как я только не извращался с этими
preg_replac'ами, но так уже целый день сижу (+вчера) и всё никак не хочет php заменять по
правильному...
*/
######################################
//work.php
$vars_file="vars.php";
$filev=implode("",file($vars_file));
# Поступающие данные в этот файл:
$const=array(
"INDEX"=>"http://blabla.ru",
"ADMIN_EMAIL"=>"email@email.com"
);
$vars=array(
["m_on_page"]=5,
["pages_on_raw"]=20
);
$sizes=array(
["name"]=20,
["email"]=40,
["message"]=6000
);
# Регулярные выражения, которые совсем не пашут...
# P.S.: в рег.выражениях я не мастер, так что прошу не смеятся... :(
foreach($const as $k=>$v) {
$filev=preg_replace('#define\("'.strtoupper($k).'","(.*?)"\)(\x59)?#U','define("'.strtoupper($k).'","'.htmlspecialchars($v).'")',$filev);
}
foreach($vars as $k=>$v) {
$filev=preg_replace('#'.$k.'=(.*?)(\x59)?#iU',($k.'='.htmlspecialchars($v).';'),$filev);
}
foreach($sizes as $k=>$v) {
$v=(int)$v;
$filev=preg_replace('#'.$k.'(.+)=>.*array\(.+?,(.+?)\)(\x44)?#iU',($k."\\0=>array($v,\\1);"),$filev);
}
/*
Надо сделать так, чтобы обрабатывался файл vars.php и его переменные заменялись на те,
которые обозначены во выше написанных массивах... Как я только не извращался с этими
preg_replac'ами, но так уже целый день сижу (+вчера) и всё никак не хочет php заменять по
правильному...
*/
######################################
Помогите написать правильные preg_replace хотя бы для одной замены, там я уже додумаю
Код:
$vars_file="vars.php";
$filev=implode("",file($vars_file));
$filev=implode("",file($vars_file));
Чего ты этим самым хотел добиться?
И ещё. А где те самые пресловутые процедуры замены чего-то на чего-то?
нравится, то перепишу:
Код:
$vars_file="vars.php";
$filev=fread(fopen($vars_file,"r"),filesize($vars_file));
$filev=fread(fopen($vars_file,"r"),filesize($vars_file));
Первый пост отредактировал...
Удачи!
SerejK, спасибо, поищу. Но за preg_* выражениями будущее! Я считаю... Тем более я где-то читал, что их (Posix) вообще уберут из PHP в последующих версиях...
Ты щас научишь! Через год ereg вообще в PHP отменят. Уже года два его (PHP) создатели не рекомендуют пользоваться функциями ereg, предупреждая, что его очень скоро не станет.
2UAS: попробу вот так:
Код:
foreach($const as $k=>$v) {
$filev=preg_replace('#define\(\x22'.strtoupper($k).'\x22,\x22.*?\x22\)\x59?#U','define("'.strtoupper($k).'","'.htmlspecialchars($v).'")',$filev);
}
foreach($vars as $k=>$v) {
$filev .= preg_replace('#'.$k.'=.*?\x59?#iU',($k.'='.htmlspecialchars($v).';'),$filev);
}
foreach($sizes as $k=>$v) {
$v=(int)$v;
$filev.=preg_replace('#(\x22'.$k.'\x22).+=>.*array\(.+?,.+?\)\x44?#iU',("\\0=>array($v,\\1);"),$filev);
}
$filev=preg_replace('#define\(\x22'.strtoupper($k).'\x22,\x22.*?\x22\)\x59?#U','define("'.strtoupper($k).'","'.htmlspecialchars($v).'")',$filev);
}
foreach($vars as $k=>$v) {
$filev .= preg_replace('#'.$k.'=.*?\x59?#iU',($k.'='.htmlspecialchars($v).';'),$filev);
}
foreach($sizes as $k=>$v) {
$v=(int)$v;
$filev.=preg_replace('#(\x22'.$k.'\x22).+=>.*array\(.+?,.+?\)\x44?#iU',("\\0=>array($v,\\1);"),$filev);
}
Ты понаставил там лишних немного скобок. В случае замены они не особо нужны, если ты заменяешь на свои значения.
Код:
$filev=preg_replace('#.*?(\x22'.$k.'\x22).*?=>.*?array\(.+?,(.+?)\)#iU',("\\1=>array($v,\\2)"),$filev);
Я думал не успею до начала универа разобратся с этой фигнёй!!!
SerejK, спасибо! Прога реально хорошая!!! А переделать из Posix в PCRE легко!!!
P.S.: в PHP6 Posix выражений уже не будет!!!
Спасибо! Тему можно закрывать...
Если вот допустим такой код
Код:
То в массив кидает '1', '2', '3'. А я хочу получить 'a', 'b'.