preg_match, пытается найти запись массива и очистить результат ... проблема с регулярным выражением - PullRequest
1 голос
/ 27 июня 2011

Я пытаюсь проанализировать некоторые данные с внешнего сайта на локальный скрипт.Локальный скрипт вызывает удаленную страницу с некоторыми данными для инициации ответа.Возвращая необходимые данные в заголовках удаленного скрипта, в этом случае данные являются строкой «ключа».

Теперь удаленная страница также выводит загрузку других заголовков, тот, который мы ищем, называется LicenceID.Кажется, что массив, созданный get_headers, включает заголовок заголовка в значение, а не ключ.Поэтому я пытаюсь использовать регулярное выражение для соответствия значению заголовка, которое выглядит примерно так:

licenceID: dfkfdlsdlghgsldghsld

function check_path($path)
{
    $headers = @get_headers($path);
    var_dump($headers);
    //while (list($key, $value) = each($headers)) 
    foreach($headers as $key => $value)
    {
    echo "$key - $value<br />"; 
    //if(preg_match('/^.*licenceID:*$/',$value))
    if (preg_match('/^.*licenceID.*$/i', $dictionary, $matches))

    {
            echo "found";
            echo "$key - $value<br />"; 
            $position = strpos($value, ':');
            $clean_value = substr($value, $position);
            $clean_up = trim_string($clean_value,":");
            return $clean_up;
        }
        else
        {
            return false;
        }
}
}

Возникли проблемы с регулярным выражением в строке if (preg_match ('/^. licenceID. $ / i ', $ словарь, $ совпадений))

не могу найти соответствие, также нужно вычеркнуть licenceID: из значения и только возвратаданные после:

Предложения приветствуются!

Ответы [ 3 ]

1 голос
/ 27 июня 2011

Я думаю, у вас возникли проблемы, потому что вы возвращаете false внутри цикла foreach, если licenceID не является первым заголовком, он всегда будет возвращать false. Вот несколько упрощенных решений:


Использование preg_grep()

$headers = @get_headers($path);
$licenseID = preg_grep('~licenceID~i', $headers);
$licenseID = preg_replace('~licenceID:\s+~i', '', $licenseID); // clean-up

Или, как @ Glass Robot предложил:

$headers = @get_headers($path, 1);
$licenseID = $headers['licenceID'];

Я не проверял это, но оно должно работать.

1 голос
/ 27 июня 2011

Вы можете просто использовать substr ():

function check_path($path)
{
    $headers = @get_headers($path);
    var_dump($headers);

    foreach($headers as $key => $value)
    {
        echo "$key - $value<br />"; 
        if ('licenceID:' == substr($value, 0, 10))
        {
            echo "found";
            echo "$key - $value<br />"; 
            $clean_value = substr($value, 10);
            $clean_up = trim($clean_value);
            return $clean_up;
        }
        else
        {
            return false;
        }
}
}
0 голосов
/ 27 июня 2011

итоговая функция выглядит так:

function check_path($path)
{ 
    $headers = @get_headers($path);
    $licenseID = preg_grep('~licenceID~i', $headers);
    $licenseID = preg_replace('~licenceID:\s+~i', '', $licenseID); // clean-up
    if($licenseID)
    {
        return $licenseID['7'];
    }
    else
    {
        return false;
    }
}

спасибо Аликс Аксель за предложение preg_grep и обнаружение ошибки в выражении false false else. конечно это всегда возвращалось ложным! DOH.

...