Извлечение пары имя-значение из блока структурированного кода AdSense, содержащегося в текстовом файле - PullRequest
0 голосов
/ 09 марта 2010

У меня есть текстовый файл, который содержит блок кода Google AdSense, и я пытаюсь извлечь файл через file_get_contents, чтобы извлечь значения переменных google_ad_client и google_ad_slot.

В приведенных ниже примерах я хочу вернуться к своей вызывающей функции:

$google_ad_client = 'pub-1234567890987654';
$google_ad_slot = '1234567890'

Файл может содержать один из этих двух форматов, и я не знаю, какой пользователь выбрал:

Более новый стиль рекламного блока

<script type="text/javascript"><!--
google_ad_client = "pub-1234567890987654";
google_ad_slot = "1234567890";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script> 
<script type="text/javascript" src="path-to-google-script"></script>

Классический стиль

<script type="text/javascript"><!--
google_ad_client = "pub-1234567890987654";
/* 336x280, created 8/6/09 */
google_ad_slot = "1234567890";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format="336x280_as";
google_ad_type="text_image";
google_color_border="FFFFFF";
google_color_bg="FFFFFF";
google_color_link="2200CC";
google_color_url="000000";
google_color_text="777777";
//-->
</script> 

Ответы [ 3 ]

1 голос
/ 09 марта 2010

Что-то вроде этого:

$code = <<<STR
<script type="text/javascript"><!--
google_ad_client = "pub-1234567890987654";
google_ad_slot = "1234567890";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script> 
<script type="text/javascript" src="path-to-google-script"></script>
STR;

if (preg_match('/google_ad_client = "([^"]+)";/', $code, $m)) {
    $google_ad_client = $m[1];
}
if (preg_match('/google_ad_slot = "([^"]+)";/', $code, $m)) {
    $google_ad_slot = $m[1];
}

var_dump($google_ad_client, $google_ad_slot);

. И вы получите в качестве вывода:

string 'pub-1234567890987654' (length=20)
string '1234567890' (length=10)

(протестировано со второй частью кода и, похоже, тоже работает нормально)


В качестве меры предосторожности вы можете также захотеть изменить регулярные выражения на что-то вроде этого, поэтому принимайте код такого же типа без пробелов (или с любым количеством пробелов) :

if (preg_match('/google_ad_client\s*=\s*"([^"]+)"\s*;/', $code, $m)) {
    $google_ad_client = $m[1];
}
if (preg_match('/google_ad_slot\s*=\s*"([^"]+)"\s*;/', $code, $m)) {
    $google_ad_slot = $m[1];
}


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

$results = array();
if (preg_match_all('/(google_ad_client|google_ad_slot)\s*=\s*"([^"]+)"\s*;/', $code, $m)) {
    $count = count($m[1]);
    for ($i = 0 ; $i<$count ; $i++) {
        $results[$m[1][$i]] = $m[2][$i];
    }
}

// TODO : test is set (see isset) before using those
var_dump($results['google_ad_client'], $results['google_ad_slot']);

Что даст вам тот же результат:

string 'pub-1234567890987654' (length=20)
string '1234567890' (length=10)
1 голос
/ 09 марта 2010
$data=file("file");
$d = preg_grep("/^google_ad_client|google_ad_slot/",$data);
print_r($d);
0 голосов
/ 09 марта 2010

Вы можете попробовать это:

function fun($page) {
        $result = array();
        if(preg_match('{google_ad_client\s*=\s*"(.*?)"}',$page,$matches)) {
                $result['google_ad_client'] = $matches[1];

        }
        if(preg_match('{google_ad_slot\s*=\s*"(.*?)"}',$page,$matches)) {
                $result['google_ad_slot'] = $matches[1];

        }     
        return $result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...