这可能是一个非常容易的问题......
我真的不知道如何使用模式搜索(preg_match
),我面对包含它的代码......
if (preg_match('!http://.*?/photos/.*?/(\d+)!i', 'http:/example.com/sites/default/files/1301584398_file.jpg', $match)) {
$id = $match[1];
$info = $f->photos_getInfo($id);
$sizes = $f->photos_getSizes($id);
foreach($sizes as $size => $sizedata) {
if ($size == "Large" || $size == "Original") {
$source = $sizedata['source'];
if (preg_match('/\.(jpg|jpeg)$/i', $source)) {
$jpg = imagecreatefromjpeg($source);
}
if (preg_match('/\.png$/i', $source)) {
$jpg = imagecreatefrompng($source);
}
if (preg_match('/\.gif$/i', $source)) {
$jpg = imagecreatefromgif($source);
}
break;
}
}
我最为困惑的是
preg_match('!http://.*?/photos/.*?/(\d+)!i', $url, $match)
这是为了什么?由于输入模式已经改变,我不知道它之前是如何看起来有点混乱...
另一个功能很清楚。它们旨在获取文件的扩展名。
答案 0 :(得分:1)
!http://.*?/photos/.*?/(\d+)!i
表示http://.*?/photos/.*?/(\d+)
的不区分大小写的匹配,其中使用的模式分隔符为!
。
http://.*?/photos/.*?/(\d+)
匹配其中包含/photos/
的任何网址,然后匹配更多内容,以/
和某些数字结尾。
.*?
尝试匹配尽可能少的字符,可能根本不匹配。 \d+
尝试匹配尽可能多的数字,最少为1。
答案 1 :(得分:1)
preg_match()是一个用于对字符串进行正则表达式匹配的函数,并将匹配存储到数组中。
第一个参数是正则表达式。它是用于定义匹配文本的模式的特殊语法。我强烈建议使用以下链接来学习正则表达式语法,因为它非常有用,虽然起初有点神秘而且难以破译。
在你的模式中:
!
- 正则表达式分隔符/
,但我们需要在模式中使用斜杠。)http://
- 字符串'http://'.*?
- 匹配任何字符(.
),零次或多次(*
),并且为“懒惰”(?
)。 /photos/
- 另一个文字字符串匹配.*?
- 与上述相同的模式。 (0或更多任何char,告诉正则表达式引擎是懒惰的)/
- 正斜杠的文字字符串匹配'/'( )
- 在正则表达式中,括号是一个特殊字符。 (\d+)
- 匹配一个或多个数字\d+
,并创建一个组以包含匹配。i
- 用于告诉正则表达式引擎忽略大小写的标志。答案 2 :(得分:0)
本声明:
preg_match('!http://.*?/photos/.*?/(\d+)!i', $url, $match)
搜索http://
字符串,然后搜索任意字符,直到第一个/
,然后搜索photos/
,然后搜索任何其他字符序列,直到另一个/
,然后通过反向引用记录的一个或多个数字的序列。
换句话说,扫描第二段为photos
的http链接并抓取网址末尾的数字ID。