我正在尝试提出一个通用表达式,它会返回字符串“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>
答案 0 :(得分:0)
print_r(preg_match_all('/ logo += (.*)/', $a, $result, PREG_PATTERN_ORDER));
echo trim($result[0][0]);
此代码示例中有两个错误。首先,图案中的“徽标”前面有一个空格。你的测试字符串似乎没有这个空间。
其次,当您使用preg_match
或preg_match_all
并希望使用匹配结果时,您需要使用if语句(因为如果找不到模式,则$result
的索引未设定):
if (preg_match_all('/logo += (.*)/', $a, $result)) {
echo trim($result[0][0]);
} else {
echo 'Not found';
}
另请注意,PREG_PATTERN_ORDER
是preg_match_all