Php выделение участка строки.
нужно присвоить переменным участи из текста,начинающиеся например с "абв" и заканчивающийся "орп".
Причём таких участков много,но содержание между "абв" и "орп" разное.
Не могу реализовать алгоритм:
нужно присвоить переменным участи из текста,начинающиеся например с "абв" и заканчивающийся "орп".
Причём таких участков много,но содержание между "абв" и "орп" разное.
PCRE.
PCRE.
Да, почитай в доке этот раздел. Там много полезных функций типа preg_match, preg_replace, preg_replace_callback
Да, почитай в доке этот раздел. Там много полезных функций типа preg_match, preg_replace, preg_replace_callback
Почитал.
Так и не понял как ими пользоваться.
Допустим у меня в $page содержится HTML код.
$search="http://someste.com/files/001.mp3";
preg_match ($page,$search,$matches);
В этом случае элементам массива $matches присвоятся все встречающиеся в коде ссылки,начинающиеся с "http://" и заканчивающиеся ".mp3" ?
Почитал.
Так и не понял как ими пользоваться.
Допустим у меня в $page содержится HTML код.
$search="http://someste.com/files/001.mp3";
preg_match ($page,$search,$matches);
В этом случае элементам массива $matches присвоятся все встречающиеся в коде ссылки,начинающиеся с "http://" и заканчивающиеся ".mp3" ?
/http:\/\/(.*?)\.mp3/g чтобы поймать
s/(http:\/\/)(.*?)(\.mp3)/$1$2$3/ig чтобы выделить
Второй чисто перловый.
В общем регексы - сила!
Почитал.
Так и не понял как ими пользоваться.
Допустим у меня в $page содержится HTML код.
$search="http://someste.com/files/001.mp3";
preg_match ($page,$search,$matches);
В этом случае элементам массива $matches присвоятся все встречающиеся в коде ссылки,начинающиеся с "http://" и заканчивающиеся ".mp3" ?
обращаю внимание что это функция для поиска с использованием регулярных выражений. Выглядит это скорее так preg_match ([COLOR=red]$search,$page[/COLOR],$matches);
preg_match ("/http:\/\/(.*?)\//i",$page,$matches);
$matches[0] -
$matches[1] - имеет все символы до первого слэша, т.е. то что в скобках
/http:\/\/(.*?)\.mp3/g чтобы поймать
s/(http:\/\/)(.*?)(\.mp3)/$1$2$3/ig чтобы выделить
Второй чисто перловый.
В общем регексы - сила!
Ага,т.е. должно быть:
preg_match("/http:\/\/(.*?)\.mp3/i",$page,$matches);
А почему выражение (.*?) в скобках?
Ведь элементам массива присвоются результаты,соответствующие ему тоже(без "http://" и ".mp3")?
И ещё:
Как в регулярное выражение вставить переменную?
Ага,т.е. должно быть:
preg_match("/http:\/\/(.*?)\.mp3/i",$page,$matches);
А почему выражение (.*?) в скобках?
Ведь элементам массива присвоются результаты,соответствующие ему тоже(без "http://" и ".mp3")?
И ещё:
Как в регулярное выражение вставить переменную?
Это для примера. В скобках обьявляется начало субпатерна, т.е. найденное соответствующее вырвжению в скобках будет находится в первом(по индексу т.е. - 1) элементе массива, если во всем регулярном выражении будет еще субпатерны они займут места(в массиве) по очереди.
[COLOR=darkblue]Пример[/COLOR]
preg_match("/$str(:\/\/)(.*?)\.(mp3)/i",$page,$matches);
$matches[1] - "http://"
$matches[2] - все символы до ".mp3"
$matches[3] - "mp3"
по поводу вставки переменной в рэгэксп - $str
и можно конечно и без скобок, но тогда в найденном будут и не нужные символы, "abc.*?z" найдет строку которая начинается с abc и заканчивается z, "abc(.*?)z" найдет все что находится между abc и z (естсно нулевой элемент будет содержать то как если бы скобок не было т.е. все)
Вот исходник:
<?
require "nocache.php";
echo '<HTML><HEAD><LINK href="http://dust.jino-net.ru/functions/style.css" rel="stylesheet">;
echo "<TITLE>GET URLS FROM PAGE</TITLE></HEAD><BODY>";
echo "<H3>Выковыривание нужных ссылок из страниц.</H3>";
echo "<FORM action=\"http://dust.jino-net.ru/tools/geturls.php\" method="GET">";
echo "Введите адрес:
<INPUT type=\"text\" name=\"addr\">
Расширение:<INPUT type=\"text\" name=\"ext\">
";
echo "<INPUT type=\"submit\" name=\"GO\" value=\"GO!\"></FORM>
";
//
//
if(isset($addr)){
$file=fopen($addr,"r");
$code=fread($file,filesize($file));
fclose($file);
$regexp="/http:\/\/.+".$ext."/i";
preg_match_all($regexp,$code,$results);
echo "<DIV class=\"block\">Результаты:
";
for($i=1;$i=<count($results);$i++){
if($ext=="m3u" or $ext=="M3U"){
$file=fopen($results[$i],"r");
$addres=fread($file,filesize($file));
fclose($file);
echo "<A href=\'$addres\'>$addres</A>
";
}
echo "<A href=\'$results[$i]\' target=\"GO\">0$i</A>
";
}
echo "</DIV></BODY></HTML>";
}
?>
Сервер почему-то выдаёт странную ошибку:
http://dust.jino-net.ru/tools/geturls.php
В 31 строке содержится только ?>
http://dust.jino-net.ru/tools/geturls.php В 31 строке содержится только
Сразу скажу что текст скрипта содержит кучу ошибок.
1. В 1-ой строке echo не закрыта каычка
2. В 4-ой эхе не заслешены кавычки у GET
ну и т.д. лень вспоминать что там еще, просто приведу переделанный текст скрипта
$use_curl = false;
if (!class_exists('curl'))
{
$use_curl = @dl('php_curl.dll');
}
function URL_GetFile($URL,$Proxy=false,$user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90)")
{
global $use_curl;
if ($use_curl)
{
$ch = curl_init($URL);
curl_setopt($ch,CURLOPT_USERAGENT,$user_agent);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
if ($Proxy)
{
curl_setopt($ch,CURLOPT_PROXY,$Proxy);
}
$URLpage = curl_exec($ch);
curl_close($ch);
return($URLpage);
}
else
{
return false;
}
}
echo "<HTML><HEAD>";
echo "<TITLE>GET URLS FROM PAGE</TITLE></HEAD><BODY>";
echo "<H3>Выковыривание нужных ссылок из страниц.</H3>";
echo "<FORM action=\"dd.php\" method=\"post\">";
echo "Введите адрес:
<INPUT type=\"text\" name=\"addr\">
Расширение:<INPUT type=\"text\" name=\"ext\">
";
echo "<INPUT type=\"submit\" name=\"GO\" value=\"GO!\"></FORM>
";
//
//
$addr = $_POST['addr'];
$ext = $_POST['ext'];
if(isset($addr))
{
if ($code = URL_GetFile($addr))
{
$regexp="/<a.*?href=[\"\']([\w\.\/:_\%\!\d\'\"]*?$ext)[\"\'].*?>/is";
preg_match_all($regexp,$code,$results);
echo "<DIV class=\"block\">Результаты:
";
foreach($results[1] as $key=>$text)
{
echo $key." - $text
\r\n";
/* if(($ext=="m3u") || ($ext=="M3U"))
{
$file=fopen($results[$i],"r");
$addres=fread($file,filesize($file));
fclose($file);
echo "$addres
";
}
echo "0$i
";*/
}
echo "</DIV></BODY></HTML>";
}
else
{
echo "error, url dont open";
}
}
?>
регексп должен быть такой, парсер форума постарался
$regexp="/<a.*?href=[\"\']([\w\.\/:_\%\!\d\'\"]*?$ext)[\"\'].*?>/is";
а да еще, модуль курл подключается для винды, для юнихов по другому, еще он может не работать на некоторых серверах, потому как отрублено... это касается и fopen
Спасибо.
Подправил свой код.
Ошибки у меня не выдаются,но не работает.
Ваш скрипт сообщает,что не может открыть файл...
обратите внимание на подключение курл библиотеки. скорее всего она на этом сервере отрублена(нужно у администрации узнать), а для проверки рэгэкспов используйте сохраненый хтмл, т.е. локальный файл