这是我第一次使用正则表达式做任何事情而且我收到了这个我无法找到的错误。
对于这个例子,我想返回“Dan Harmon”。
$url = 'http://imdb.com/title/tt1439629/';
$pattern = '/\/<h4\sclass="inline">Creator:<\/h4>\r<a\shref="\/name\/nm[0-9]{7}\/\?ref\_=tt\_ov_wr"\sitemprop=\'url\'><span\sclass=\"itemprop"\sitemprop=\"name\">(.*?)<\/span><\/a>/g/';
$imdb = file_get_contents($url);
preg_match($pattern, $imdb, $match);
var_dump($match);
添加了我缺少的反斜杠,这仍然没有返回任何内容,有人可以帮忙吗?
由于
答案 0 :(得分:2)
..\/name/nm[0-9]{7}..
在名称之后有一个未转义的正斜杠和脚本认为它是模式的结尾,包含修饰符n
,m
等。确保所有正斜杠都已转义\/
,或选择任何其他字符来限制图案范围,例如#
或@
答案 1 :(得分:1)
你忘了在/
之后逃离href="\/name
,所以它被视为结束分隔符,之后的所有内容都试图被解析为修饰符。
答案 2 :(得分:1)
我不会说从网页中提取一些数据的最佳方法是使用DOMDocument,XPath,simpleXML ...... 当您使用大量斜杠处理html或url时,首先要做的是选择另一个分隔符而不是/正则表达式。例如:
$pattern = '~<h4 class="inline">Creator:</h4>\s*<a [^>]+><span [^>]+>\K[^<]+~';
if (preg_match($pattern, $imdb, $match))
print_r($match);
使用除/(〜这里)之外的其他分隔符,您不需要转义所有斜杠(=更少的潜在错误)
不描述我使用的所有标签内容:[^>]+
- &gt;所有不是>
一次或多次
\K
=忘记你在左边看到的一切
(换句话说,在测试\ K之前的所有模式,但将从最终结果中删除)。通过这个技巧,您不需要捕获组,因为您的整个模式就是结果。
答案 3 :(得分:0)
由于您在表达式中使用了.*?
,因此应该包含搜索选项s
,以确保.
也匹配新的换行符。
<?php
$sourcestring="your source string";
preg_match_all('/your regex/is',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
i = case insensitive
m = multi line `^` and `$` match at line breaks
x = ignore whitespace in the pattern, used for adding comments to the regex to help keep it human readable
s = dot matches all characters including new line