php获取字符串中图片url地址正则

 更新时间:2016年11月25日 17:42  点击:2122
自己写了一个匹配图片路径的正则,总是有点不兼容,有些图片的路径获取不到,在网上找了半天,总算找到一个完美的。

例子

 代码如下 复制代码

$preg = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/i";

preg_match_all($preg,$str,$res);


这下子,管用多了,不管怎样的代码结构,都能顺利的匹配出图片的路径。
例子

 代码如下 复制代码

$str='<p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_4.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_3.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>';
 
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/";
 
preg_match_all($pattern,$str,$match);
 
print_r($match);

最后总结一个下载远程图片地址

 代码如下 复制代码

/**
* 提取字符串中图片url地址
* @param type $str
* @return type
*/
function getimgs($str) {
    $reg = '/((http|https):\/\/)+(\w+\.)+(\w+)[\w\/\.\-]*(jpg|gif|png)/';
    $matches = array();
    preg_match_all($reg, $str, $matches);
    foreach ($matches[0] as $value) {
        $data[] = get_file($value);
    }
    return $data;
}

下面来给大家分享一个正则神器 VerbalExpressionsPhp使用例子,有兴趣的同学不防进入参考一下吧。

该类库是jehna/VerbalExpressions的php版本。

这货的竟然通过链式方法把正则给语义化了。。。我表示很愤慨啊。。。

安装

 代码如下 复制代码

加入composer.json

{
    "require": {
        ...,
        "markwilson/VerbalExpressionsPhp": "dev-master"
    }
}

使用

 代码如下 复制代码
<?php
 
require_once 'vendor/autoload.php';
 
use MarkWilson\VerbalExpression;
use MarkWilson\VerbalExpression\Matcher;
 
// 初始化VerbalExpression实例
$verbalExpression = new VerbalExpression();
 
// URL地址匹配
$verbalExpression->startOfLine()
                 ->then('http')
                 ->maybe('s')
                 ->then('://')
                 ->maybe('www.')
                 ->anythingBut(' ')
                 ->endOfLine();
 
// 编译表达式 - 返回: ^(http)(s)?(\:\/\/)(www\.)?([^\ ]*)$
$verbalExpression->compile();
 
// 执行匹配
preg_match($verbalExpression, 'http://www.111cn.net'); // 返回 1
// 或
$matcher = new Matcher();
$matcher->isMatch($verbalExpression, 'http://www.google.com'); // 返回 true

嵌套表达式

 代码如下 复制代码
<?php
 
$innerExpression = new VerbalExpression();
$innerExpression->word();
 
$outerExpression = new VerbalExpression();
$outerExpression->startOfLine()
                ->find($innerExpression)
                ->then($innerExpression)
                ->endOfLine();
 
// 返回 ^(\w+)(\w+)$
$outerExpression->compile();

禁用子模式捕获

默认情况下,子匹配规则可以被获取,并返回匹配的数组。

 代码如下 复制代码
<?php
 
// 禁用获取子匹配规则
$verbalExpression->disableSubPatternCapture()->word(); // (?:\w+)
// 或
$verbalExpression->word(false); // (?:\w+)

这样做只会影响后续增加的表达式;任何已经添加的匹配规则不会受到影响。这里允许禁用和启用组。

 代码如下 复制代码

<?php
 
// 相当于 (\w+)(?:\w+)(?:\w+)(\w+)
$verbalExpression->word()
                 ->disableSubPatternCapture()
                 ->word()
                 ->word()
                 ->enableSubPatternCapture()
                 ->word();

下面整理的正则匹配html标签的例子都是在网上找了,不过这一篇是非常的全面的并且包括了html中各种标签了,具体有多少我不说我可以告诉你所有的html都可以匹配出来哦。
正则表达式
<(\S*?) [^>]*>.*?</\1>|<.*? />
匹配 <html>hello</html>|<a>abcd</a>
不匹配 abc|123|<html>ddd

 

正则表达式
^[^<>`~!/@\#}$%:;)(_^{&*=|'+]+$
匹配 This is a test
不匹配 <href = | <br> | That's it

 

正则表达式
&lt;!--.*?--&gt;
匹配 &lt;!-- &lt;h1&gt;this text has been removed&lt;/h1&gt; --&gt; | &lt;!-- yada --&gt;
不匹配 &lt;h1&gt;this text has not been removed&lt;/h1&gt;

 

正则表达式
(\[(\w+)\s*(([\w]*)=('|&quot;)?([a-zA-Z0-9|:|\/|=|-|.|\?|&amp;]*)(\5)?)*\])([a-zA-Z0-9|:|\/|=|-|.|\?|&amp;|\s]+)(\[\/\2\])
匹配 [link url=&quot;http://www.domain.com/file.extension?getvar=value&amp;secondvar=value&quot;]Link[/li
不匹配 [a]whatever[/b] | [a var1=something var2=somethingelse]whatever[/a] | [a]whatever[a]

 

正则表达式
href=[\"\'](http:\/\/|\.\/|\/)?\w+(\.\w+)*(\/\w+(\.\w+)?)*(\/|\?\w*=\w*(&\w*=\w*)*)?[\"\']
匹配 href="www.yahoo.com" | href="http://localhost/blah/" | href="eek"
不匹配 href="" | href=eek | href="bad example"

 

正则表达式
&quot;([^&quot;](?:\\.|[^\\&quot;]*)*)&quot;
匹配 &quot;This is a \&quot;string\&quot;.&quot;
不匹配 &quot;This is a \&quot;string\&quot;.

 

正则表达式
(?i:on(blur|c(hange|lick)|dblclick|focus|keypress|(key|mouse)(down|up)|(un)?load|mouse(move|o(ut|ver))|reset|s(elect|ubmit)))
匹配
 
onclick | onsubmit | onmouseover
不匹配 click | onandon | mickeymouse

 

正则表达式
(?s)/\*.*\*/
匹配 /* .................... */ | /* imagine lots of lines here */
不匹配 */ malformed opening tag */ | /* malformed closing tag /*

 

正则表达式
<(\S*?) [^>]*>.*?</\1>|<.*? />
匹配 <html>hello</html>|<a>abcd</a>
不匹配 abc|123|<html>ddd

 

正则表达式
\xA9
匹配 ©
不匹配 anything

 

正则表达式
src[^&gt;]*[^/].(?:jpg|bmp|gif)(?:\&quot;|\')
匹配 src=&quot;../images/image.jpg&quot; | src=&quot;http://domain.com/images/image.jpg&quot; | src='d:\w
不匹配 src=&quot;../images/image.tif&quot; | src=&quot;cid:value&quot;

 

正则表达式
/\*[\d\D]*?\*/
匹配 /* my comment */ | /* my multiline comment */ | /* my nested comment */
不匹配 */ anything here /* | anything between 2 seperate comments | \* *\

 

正则表达式
<[a-zA-Z]+(\s+[a-zA-Z]+\s*=\s*("([^"]*)"|'([^']*)'))*\s*/>
匹配 <img src="test.gif"/>
不匹配 <img src="test.gif"> | <img src="test.gif"a/>
匹配html中A标签其实非常的简单我们只要懂一点正则的都可以实现,下面我整理了两个不同方法正则匹配A标签的例子。

方法一

 代码如下 复制代码

$a ='<a href="www.111cn.net">百度</a>谷哥<a href="www.111cn.net">谷歌</a><a href="www.111cn.net">雅虎</a>';
preg_match_all('/<a[^>]+>[^>]+a>/',$a,$aout);
print_r($aout);

得出结果

Array

(

    [0] => Array

        (

            [0] => <a href="www.111cn.net">百度</a>

            [1] => <a href="www.111cn.net">谷歌</a>

            [2] => <a href="www.111cn.net">雅虎</a>

        )

 

)

方法二

示例如下:

 代码如下 复制代码
$str1 = '<a href=http://www.111cn.net>test</a>';
$str2 = '<a href='http://www.111cn.net'>test</a>';
$str3 = '<a href = "javasccript: href ('test');" target = "_blank" />test</a>';
$regex = '/hrefs*=s*(?:"([^"]*)"|'([^']*)'|([^"'>s]+))/';
preg_match($regex, $str1, $matches);
print_r($matches);
preg_match($regex, $str2, $matches);
print_r($matches);
preg_match($regex, $str3, $matches);
print_r($matches);
 
匹配结果:
Array
(
    [0] => href=http://www.111cn.net
    [1] =>
    [2] =>
    [3] => http://www.111cn.net
)
Array
(
    [0] => href='http://www.111cn.net'
    [1] =>
    [2] => http://www.111cn.net
)
Array
(
    [0] => href = "javasccript: href ('test');"
    [1] => javasccript: href ('test');
)

/href\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^"\'>\s]+))/
思路很巧妙,即:
分两步,先区配a标签,然后再区配a标签里面的链接

我做了一个英文站但是经常有人发中文的评论了,希望这些垃圾评论全部替换成字了,下面我整理了两个php正则替换中文的例子,我们一起来看看。

采用php的正则删除中文

 代码如下 复制代码

/*转换为UTF8 再处理*/

$a = mb_convert_encoding($a, 'UTF-8', 'GB2312');
$a = preg_replace("/[x{4e00}-x{9fff}]/u", "", $a);
 
/*再转回来*

$a = mb_convert_encoding($a, 'GB2312', 'UTF-8');

例子

 代码如下 复制代码


$chstr="<a>中文区间afeowahgieawhjo中文区间fawgwea中文区间aghoiawghowi中文区间</a>";
$match="/[中文区间|中文区间|我靠|中文区间]/";
$chstr=preg_replace($match,"",$chstr);
echo $chstr;


简单说明下

x{4e00}-x{9fff} 这个是中文区间(各种文字都有unicode码区间)

/u 表示采用unicode码 进行正则判断

[] 正则标准括号,表示范围[0-3]表示 0,1,2,3, 0到3的意思

[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 解决vue字符串换行问题(绝对管用)

    这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 使用PHP similar text计算两个字符串相似度

    在网站开发中,我们经常使用php similar text 计算两个字符串相似度;1,similar_text的用法 如果我想计算"ly89cn"和"ly89"的相似程度,有两种表示方法复制代码 代码如下: echo similar_text('ly89cn', 'ly89'); ...2015-11-08