php图片的正则表达式详解
正则表达式学的很差,所以大部分都从网上搜集现成的例子来用。这次搜到一个提取一段字符里的图片的表达式,经测试后发现一些小问题。在改良的过程中,学到了不少正则表达式的用法,特此记录下来。
原代码:
1 2 3 |
$str2 = '<center><img src="/uploads/images/20100516000.jpg" height="120" width="120"><br />PHP正则提取或更改图片img标记中的任意属性</center>'; preg_match('/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i',$str2,$match); print_r($match); |
上面的代码运行结果如下:
1 2 3 4 5 6 |
Array ( [0] => <img src="/uploads/images/20100516000.jpg" height="120" width="120"> [1] => " [2] => /uploads/images/20100516000.jpg ) |
下面详解一下这段正则表达式:
/<\s*img\s+[^>]*?src\s*=\s*(\’|\”)(.*?)\\1[^>]*?\/?\s*>/i 开头的/和末尾的/i的功能就不说了,大家都知道。
< | 以<开头 |
\s* | 有0个或者多个空白字符 |
img | 包含文字img |
\s+ | 有1个或者多个空白字符 |
[^>]*? | 有0个或者多个不包含>的任意字符(注1)这段是删除可能的class…. |
src | 包含文字src |
\s* | 有0个或者多个空白字符 |
= | 包含文字= |
\s* | 0个或者多个空白字符 |
(\’|\”) | ‘ 或者 “ |
(.*?) | 1个或者多个任意字符 |
\\1 | 复制第一个括号里的条件(注2) |
[^>]*? | 不包含>的任意字符 |
\/? | 有0个或者多个/ |
\s* | 有0个或者多个空白字符 |
> | 包含文字> |
1 2 |
注1:当?紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。 注2:\1 代表 第一个 ( ) 里面部分 匹配的 字符串 \2 代表 第二个 ( ) 里面的。\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,<span class="string">'n'</span> 匹配字符 <span class="string">"n"</span>。<span class="string">'\n'</span> 匹配一个换行符。序列 <span class="string">'\\'</span> 匹配 <span class="string">"\" 而 "</span>\(<span class="string">" 则匹配 "</span>("。 |
噢!评论已关闭。