遇到preg_match_all未定义的偏移通知

时间:2014-11-24 18:09:40

标签: php

我正在尝试提出一个通用表达式,它会返回字符串“logo = ...”,例如在这种情况下“logo = Yahoo! logo.svg”但是希望它返回完整的字符串徽标中的“l”直到“|”。 目前我收到并且错误:注意:单击提交时未定义的偏移量:0。请参阅下面的脚本:

<html>
<body>
<h2>Search</h2>
<form method="post">
Search: <input type="text" name="q" value="Yahoo!"/>
<input type="submit" value="Submit">
</form>

<?php
if (isset($_POST['q'])) {
$search = $_POST['q'];


$url_2 = "http://en.wikipedia.org/w/api.php?
action=query&prop=revisions&rvprop=content&format=json&titles=$search&rvsection=0&continue=";
$res_2 = file_get_contents($url_2);
$data_2 = json_decode($res_2);

?>

<h2>Search results for '<?php echo $search; ?>'</h2>
<ol>
<?php foreach ($data_2->query->pages as $r): 

?>

<li>

<?php foreach($r->revisions[0] as $a); 
echo $a; 

print_r(preg_match_all('/ logo += (.*)/', $a, $result, PREG_PATTERN_ORDER));
echo trim($result[0][0]); 
?>

</li>
<?php endforeach; ?>
</ol>

<?php 
}
?>

</body>
</html>

1 个答案:

答案 0 :(得分:0)

print_r(preg_match_all('/ logo += (.*)/', $a, $result, PREG_PATTERN_ORDER));
echo trim($result[0][0]);

此代码示例中有两个错误。首先,图案中的“徽标”前面有一个空格。你的测试字符串似乎没有这个空间。

其次,当您使用preg_matchpreg_match_all并希望使用匹配结果时,您需要使用if语句(因为如果找不到模式,则$result的索引未设定):

if (preg_match_all('/logo += (.*)/', $a, $result)) {
    echo trim($result[0][0]);
} else {
    echo 'Not found';
}

另请注意,PREG_PATTERN_ORDERpreg_match_all

的第4个参数的默认值