在我的文本字段中,我将图像包含在[img] BB标签中,如
[img]http://i58.tinypic.com/i3yxar.jpg[/img]
和
之类的普通图片网址http://www.jonco48.com/blog/tongue1.jpg
我希望preg_match查找纯图片网址,如果找到则返回1否则为0,如何做到这一点???
由于
答案 0 :(得分:1)
使用正则表达式很难找到没有片段的模式,在这种情况下是img open和closure标签。
所以我会搜索标签内的网址,然后搜索所有网址并比较这些计数
$text = "";
$tagPattern = "/\[img\].+?\[\/img\]/";
preg_match_all($pattern, $text, $tagMatches);
$urlInTagCount = count($tagMatches[0]);
$plainPattern = "~https?://\S+\.(?:jpe?g|gif|png)(?:\?\S*)?(?=\s|$|\pP)~i";
preg_match_all($pattern, $text, $plainMatches);
$allUrlCount = count($plainMatches[0]);
return $allUrlCount > $urlInTagCount;
答案 1 :(得分:1)
如果您需要做的就是检查字符串周围是否有[img][/img]
个标签,那么使用正则表达式实在是太过分了。
您可以轻松使用一些简单的字符串函数:
function isBB($s){
$len = strlen($s);
return $check = substr($s, 0, 5) == "[img]" && substr($s, $len-6, $len) == "[/img]";
}
isBB('[img]http://i58.tinypic.com/i3yxar.jpg[/img]') // true
isBB('http://www.jonco48.com/blog/tongue1.jpg') //false
答案 2 :(得分:0)
这里有REGEX:~https?://\S+\.(?:jpe?g|gif|png)(?:\?\S*)?(?=\s|$|\pP)~i
在PHP中:
preg_match('@\[img\](.+?)\[/img\]@', $your_text, $matches);
echo $matches[1];
答案 3 :(得分:0)
以下内容应按预期工作:
<?php
$str = '[img]http://i58.tinypic.com/i3yxar.jpg[/img]';
preg_match('@\[img\](.+?)\[/img\]@', $str, $matches);
echo $matches[1];