preg_match

Aknichy

Новичок
preg_match

не понимаю чего-то
на локале все работает, на сайте под одним сервером работает, под другим нет...

отлов этого косяка показал, что ошибка (точнее - не выполнение) возникает в куске кода

PHP:
   preg_match("/(?<=href=\")(.*?)(?=\")/", $arr1["all_txt"][$i], $strr);
   $arr["url"][$i]=$strr[0];
в $arr1["all_txt"][$i] хранится кусок теста с сылками - их нужно выдрать.
$strr - получается пустой. причем, повторюсь - на разных серверах то работает, то нет...

может кто-то встречал что-то подобное?
 

vasa_c

Новичок
(.*?) - а вопрос зачем, если не секрет?
И лучше бы по-моему ([^"]*)
 

Aknichy

Новичок
vasa_c
согласна - с вопросом погорячилась

чем лучше?
если честно, не поняла - а куда ты предлогаешь это вставить?
да и фишка не в этом - фишка в том, что работает через раз :(
 

vasa_c

Новичок
А, млин, извини, нужен вопрос, он жадность уменьшает.

Через раз — я правильно понял, что на одном сервере все тесты работаю так, как надо, а на другом все те же самые не работают?
 

Aknichy

Новичок
ага
именно
причем сдела тоже через substr - работает. но так не хочется его использовать :(
 

WP

^_^
vasa_c
> (.*?) - а вопрос зачем, если не секрет?
> И лучше бы по-моему ([^"]*)
Правильнее как раз (.*?)
Aknichy
PHP:
function x_array_merge($arr1,$arr2)
{
 if (!is_array($arr1)) {$arr1 = array();}
 if (!is_array($arr2)) {$arr2 = array();}
 $arr = array();
 for ($i=0;$i<count($arr1);$i++) {$arr[$i]=($arr1[$i] == '')?$arr2[$i]:$arr1[$i];}
 return $arr;
}
function get_links($body)
{
 $pattern  = "/((@import\s+[\"'`]([\w:?=@&\/#._;-]+)[\"'`];)|";
 $pattern .= "(:\s*url\s*\([\s\"'`]*([\w:?=@&\/#._;-]+)";
 $pattern .= "([\s\"'`]*\))|<[^>]*\s+(src|href|url)\=[\s\"'`]*";
 $pattern .= "([\w:?=@&\/#._;-]+)[\s\"'`]*[^>]*>))/i";
 preg_match_all($pattern,$body,$matches);
 return is_array($matches)?x_array_merge($matches[3],x_array_merge($matches[5],$matches[8])):array();
}
var_dump(get_links('<a href="http://link">'));
/*
array(1) {
  [0]=>
  string(11) "http://link"
}
*/
 
Сверху