PHP中preg_match_all函数正则匹配详解

 更新时间:2016年11月25日 16:47  点击:2116
preg_match_all函数是用来获取指定数据内容的,它经常用于执行正则表达多,下面我来给大家介绍两个关于preg_match_all函数实现教程,一个是获取url参数,一个是获取内容中图片方法。

preg_match_all — 执行一个全局正则表达式匹配

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

 代码如下 复制代码

<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
    "<b>example: </b><div align=left>this is a test</div>",
    $out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "n";
echo $out[1][0] . ", " . $out[1][1] . "n";
?>

如何获取伪静态url中的参数变量,已经对应的值。

比如说。你现在url的是这样的。/js/d1b3cid419299191rs好脚本

你的.htaccess文件会这样写rewirte规则 RewriteRule ^js/(.*)$ /index.php?m=Sell&a=index&g=$1 [QSA,PT,L]

这样你就可以把g接收过来。

 代码如下 复制代码

$get = 'd1b3cid419299191rs好脚本';
$rs_pos = strpos($get,'rs');
if($rs_pos !== false)
{
    $rs = substr($get,$rs_pos);
    $rs = str_replace('rs','',$rs);
    $rs = strpos($rs,'/')!==false ? substr($rs,0,strpos($rs,'/')) : $rs;
    $get = substr($get,0,$rs_pos);
}
echo 'keywords='.$rs;
echo '<br>';
preg_match_all('/([a-z]*)([0-9]+)/',$get,$m);
if($m)
{
        $k = $v = '';
        $count = count($m[1]);
        for($i = 0; $i <= $count; $i++)
        {
            ${$m[1][$i]} = $m[2][$i];
            if(isset(${$m[1][$i]}))
            {   
                echo $m[1][$i].'='.${$m[1][$i]};
                echo '<br>';
            }
        }
}

结果:keywords=好脚本,d=1,b=3,cid=419299191

 

匹配文章中的图片

 

 代码如下 复制代码

<?php
$con = file_get_contents("http://www.111cn.net/");
$pattern="/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg|.png]))['|"].*?[/]?>/";
preg_match_all($pattern,$con,$match);
print_r($match);
?>

输出代码

Array
(
[0] => Array
(
[0] => <img src="http://www.111cn.net/usr/themes/dddefault/images/logo.png" alt="" />
[1] => <img style="display: block; margin-left: auto; margin-right: auto;" title="" src="http://www.111cn.net/usr/uploads/2012/09/531656480.jpg" alt="2" />
[2] => <img style="display: block; margin-left: auto; margin-right: auto;" src="http://www.111cn.net/usr/uploads/2012/09/2647136297.jpg" alt="875EA1C00E50B4542797E24FA6E7E1F2.jpg" />
)
[1] => Array
(
[0] => http://www.111cn.net/usr/themes/dddefault/images/logo.png
[1] => http://www.111cn.net/usr/uploads/2012/09/531656480.jpg
[2] => http://www.111cn.net/usr/uploads/2012/09/2647136297.jpg
)
)

strtotime函数在php中是可以把日志转换成时间戳,他可以方便的让我们对日期时间分秒的计算,下面我来给各位介绍时strtotime函数用法,有需要的同学可参考。

1.获取当前的时间的时间戳!

a.实用strtotime('now');来获取当前的时间戳!(因为PHP当前时间和真是时间相差8小时)

 代码如下 复制代码

1 echo date('Y-m-d H:i:s',strtotime('now')+8*60*60);
结果:2013-04-05 03:15:02

b.你也可以用time() 来直接获取!

 代码如下 复制代码


1 echo date('Y-m-d H:i:s',time()+8*60*60);
结果:2013-04-05 03:15:02

2.获取10天之后的时间戳:

使用方法:

 代码如下 复制代码
1 strtotime("+10 days")+8*60*60

输出10天后的日期,便于查看。

 代码如下 复制代码

1 echo date('Y-m-d H:i:s',strtotime("+10 days")+8*60*60);

结果:2013-04-15 03:15:02

3.获取一周的时间戳:


使用方法:

 代码如下 复制代码

1 strtotime("+1 week")+8*60*60

或者你使用上面按天来获取时间戳.写法如:

 代码如下 复制代码

strtotime("+7 days");

4.还可以获取指定几周几天几小时几秒来获取时间戳

使用方法:

 代码如下 复制代码

1 strtotime ("+1 week 2 days 4 hours 2 seconds")+8*60*60
1 echo date('Y-m-d H:i:s',strtotime ("+1 week 2 days 4 hours 2 seconds")+8*60*60);

结果:2013-04-12 07:15:04;

5.获取上周一或者下周四的时间戳:

使用方法:

a.获取上周一的时间戳:

 代码如下 复制代码

1 strtotime ("last Monday")+8*60*60
1 echo date('Y-m-d H:i:s',strtotime ("last Monday")+8*60*60);

结果:2013-04-01 08:00:00;


b.获取下周四的时间戳

 代码如下 复制代码

1 strtotime ("next Thursday")+8*60*60
1 echo date('Y-m-d H:i:s',strtotime ("next Thursday")+8*60*60);

结果:2013-04-11 08:00:00;


strtotime函数比较两个时间的大小


strtotime()函数对两个固定的时间进行比较,如下:
    1):定义两个固定的时间;

    2):通过strtotime()函数将固定时间转换成时间戳;

    3):对两个时间戳的值进行比较。

其实例代码如下:

 代码如下 复制代码

<?php
$time="2012年11月23日15时50时20秒";
$times="2013-01-14 09:09:09";
if(strtotime($time)-strtotime($times)<0){
 echo "时间:".$time."&nbsp;早于时间:".$times;
}else{
 echo "时间:".$times."&nbsp;早于时间:".$time;
}
echo "<br />它们相差的时间值是:".(strtotime($time)-strtotime($times))
?>

上面的代码运行结果如下:

时间:2012年11月23日15时50时20秒 早于时间:2013-01-14 09:09:09
它们相差的时间值是:-1358125749

file_get_contents函数多用来于来采集远程服务器上的内容,但使用file_get_contents函数之前我们在php.ini中是必须把allow_url_fopen开启才行

问题描述

fopen(),file_get_contents(),getimagesize() 等都不能正常获得网络上的内容,具体表现为凡参数是URL的,一律返回空值

如果是windows可找开

allow_url_fopen开启

如果是否linux中可以

重新编译PHP,去掉–with-curlwrapper 参数——编译前记得先执行 make clean。


windows 在未开户allow_url_fopen时我们利用

 代码如下 复制代码

< ?php
$file_contents = file_get_contents(''http://www.111cn.net/'');
echo $file_contents;
?>

是获取不到值的,但我们可以利用function_exists来判断此函数是否可用。

 代码如下 复制代码


function file_get_content($url) {
if (function_exists(‘file_get_contents')) {
$file_contents = @file_get_contents($url);
}
if ($file_contents == ”) {
$ch = curl_init();
$timeout = 30;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
return $file_contents;
}

本文章给大家全面的介绍一下关于php中var_dump()函数用法详解,大家可参考参考。

var_dump()

void var_dump ( mixed expression [, mixed expression [, ...]] )

var_dump()方法是判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。


例1

 代码如下 复制代码

<?php
$a = "alsdflasdf;a";
$b = var_dump($a);
echo "<br>";
//var_dump($c);
$d=var_dump($c);
echo "<br>";
echo $a;
echo "<br>";
echo $b;
echo "<br>";
输出:
string(12) "alsdflasdf;a"
NULL
alsdflasdf;a

例2

1. var_dump() 示例

 代码如下 复制代码

<pre>
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_dump ($a);

/* 输出:
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

*/

$b = 3.1;
$c = TRUE;
var_dump($b,$c);

/* 输出:
float(3.1)
bool(true)

*/
?>
</pre> 

 
var_export和serialize做数组缓存


$str = serialize($arr);
这两种机制转换之后的字符串是不一样的,第一种是数组的原型模式,第二种是序列化后的形式。第一 种存入文件中的只要加上<?php ?>标签,就形式了一个可用的数组原型,对调用来说,不用转换,直接返回这个数组就可以,但第二种,则需要再用一次unserialize函数反序 列化一下。对于第种一说,就多了一步操作。下来我们用数据说话吧:

 

 代码如下 复制代码

<?
set_time_limit(50);
$a = array(1,2,3);
$b = array('a'=>1, 'b'=>2, 'c'=>3);
$c = array('a'=>array(1,2,3), 'b'=>array(4,5,6));


$time1 = microtime(true);


$times = 1000000; #10w


for($i=1; $i<=$times; $i++){
 $A = var_export($a, true);
}


$time2 = microtime(true);


for($i=1; $i<=$times; $i++){
 $B = var_export($b, true);
}


$time3 = microtime(true);


for($i=1; $i<=$times; $i++){
 $C = var_export($c, true);
}


$time4 = microtime(true);


for($i=1; $i<=$times; $i++){
 $X = serialize($a);
}


$time5 = microtime(true);


for($i=1; $i<=$times; $i++){
 $Y = serialize($b);
}


$time6 = microtime(true);


for($i=1; $i<=$times; $i++){
 $Z = serialize($c);
}


$time7 = microtime(true);


for($i=1; $i<=$times; $i++){
 $O = unserialize($X);
}


$time8 = microtime(true);


for($i=1; $i<=$times; $i++){
 $P = unserialize($Y);
}


$time9 = microtime(true);


for($i=1; $i<=$times; $i++){
 $Q = unserialize($Z);
}
$time10 = microtime(true);


$var_export_time['a'] = $time2 - $time1;
$var_export_time['b'] = $time3 - $time2;
$var_export_time['c'] = $time4 - $time3;


$serialize_time['a'] = $time5 - $time4;
$serialize_time['b'] = $time6 - $time5;
$serialize_time['c'] = $time7 - $time6;


$unserialize_time['a'] = $time8 - $time7;
$unserialize_time['b'] = $time9 - $time8;
$unserialize_time['c'] = $time10 - $time9;
print_r($var_export_time);
print_r($serialize_time);
print_r($unserialize_time);
?>
output:
Array(    [a] => 3.3401498794556    [b] => 5.1394801139832    [c] => 8.8483898639679)Array(    [a] => 1.6063709259033    [b] => 1.7033960819244    [c] => 3.4534389972687)Array(    [a] => 1.6037359237671    [b] => 1.817803144455    [c] => 3.7992968559265)

由上面数据说明:
var_export函数性能比serialize函数性能差一倍,而 unserialize时间也需要和serialize差不多的时间,serialize加上unserialize时间,和用var_export时间 差不多。

在php中dirname()与__FILE__是我们的常量,本文章给大家详细介绍dirname()与__FILE__常量在使用过程中一些事项,大有兴趣的朋友可进入参考。

dirname() 函数

string dirname ( string $path )

给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。

在 Windows 中,斜线(/)和反斜线()都可以用作目录分隔符。在其它环境下是斜线(/)。


Example #1 dirname() 例子

例子

 代码如下 复制代码

<?php
echo dirname("c:/testweb/home.php");
echo dirname("/testweb/home.php");
?>

输出:

c:/testweb
/testweb

__FILE__

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名

dirname(__file__)
__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
1)dirname(__FILE__) 函数返回的是脚本所在在的路径。 更新网络
比如文件 b.php 包含如下内容:

 代码如下 复制代码

<?php
$basedir = dirname(__FILE__);
echo $basedir
//将在页面打印出一个这个文件所在绝对路径!
?>

我做的测试得到结果: E:websiteothertestcms

dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。

不会返回当前的文件名称。

dirname(__FILE__) 也可能返回一个 . (当前目录)
[原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下.
比如 WEB_ROOT 为: "C:/root/www/".]

b.php文件路径为: "C:/root/www/b.php". 使用方法提示, 如果重复一次可以把目录往上提升一个层次:
比如:$d = dirname(dirname(__FILE__));
其实就是把一个目录给dirname()做参数了.因为dirname()返回最后的目录不带\\或者是/
所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了.照常返回
当前目录的上级目录.这样重复就得到了它的上一级的目录. 包含得到上一级目录的文件include(dirname(__FILE__).'/../filename.php');

2。如何将PHP文件和html文件结合使用

 代码如下 复制代码
if($reguser != ""){
echo"Submit Photo
";
echo"Log Out";
}else{
echo"Login";
}
?>
[!--infotagslink--]

相关文章

  • PHP正则匹配img及标签各属性值(匹配图片函数)

    有一个项目要获取页面中所有img标签中的图片地址,这里我们使用到了preg_match_all正则函数,然后看我下面的一些参数即可实现了。 例 代码如下 复制代码 ...2016-11-25
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • JS基于正则截取替换特定字符之间字符串操作示例

    这篇文章主要介绍了JS基于正则截取替换特定字符之间字符串操作方法,结合具体实例形式分析了JS基于正则实现针对特殊字符、数字等字符串类型的截取操作相关技巧,需要的朋友可以参考下...2017-02-08
  • js正则学习小记之匹配字符串字面量

    关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
  • C#使用正则表达式过滤html标签

    最近在开发一个项目,其中有需求要求我们把一段html转换为一般文本返回,使用正则表达式是明智的选择,下面小编给介绍下C#使用正则表达式过滤html标签,需要的朋友参考下...2020-06-25
  • js 正则学习小记之匹配字符串字面量优化篇

    昨天在《js 正则学习小记之匹配字符串字面量》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的...2021-05-07
  • 浅谈JS正则RegExp对象

    这篇文章主要介绍JS正则RegExp对象,正则表达式是描述字符模式的对象,用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。下面就来看具体详情,需要的朋友可以参考一下...2021-10-21
  • OpenResty中正则模式匹配的2种方法详解

    在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范,下面这篇文章主要给大家介绍了关于OpenResty中正则模式匹配的2种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。...2020-06-30
  • 浅谈js正则之test方法bug篇

    其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西...2021-05-07
  • JS利用正则配合replace替换指定字符

    替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下...2021-05-07
  • Spring-AOP 静态正则表达式方法如何匹配切面

    这篇文章主要介绍了Spring-AOP 静态正则表达式方法如何匹配切面的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-19
  • php正则中文表达式

    php教程正则中文表达式 $str = "abc一二三cde"; echo preg_replace('/[^x4e00-x9fa5]/i'," ",$str); $str = "php编程"; if (preg_match("/^[x4e00-x9fa5]+$/u",$s...2016-11-25
  • php正则入门 实习email和URL验证

    匹配email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 匹配网址url的正则表达式:[a-za-z]+://[^s]* 下面看一实例 <body onload="f.a.select();"> <?php...2016-11-25
  • PHP 替换字符串中img标签样式 preg_match_all str_replace

    我们要获取字符串中图片地址需要使用preg_match_all正则表达式来获取,替换获取到的内容使用str_replace函数即可了,下面我们看个实例。 例 代码如下 复制...2016-11-25
  • PHP正则判断输入是否字母实例程序

    在php中判断是否为纯字母我们可直接使用正则/^[a-zA-Z]$/来验证了,包括大小写字母哦,有需要了解的同学可参考参考。 上代码 代码如下 复制代码 ...2016-11-25
  • C#正则检测字符串是否字母数字混编的方法

    这篇文章主要介绍了C#正则检测字符串是否字母数字混编的方法,涉及C#正则判定字符串的使用技巧,需要的朋友可以参考下...2020-06-25
  • 正则文章内容中img图片地址与正则内容中的a连接地址

    本篇实例主要是讲到关于如何使用php中正则表达试来获取我们想要的东西,上面的实例就是要把文章内容字符串的链接地址与图片地址全部取出来,所有我们要正则就方便多了...2016-11-25
  • php正则链接-取得内容所有链接

    下面提供二款关于php正则链接方法,他们可以-取得内容所有链接并且保存到一个数组,当然也可以把链接全部替换哦。 方法一 代码如下 ...2016-11-25
  • PHP正则实战之匹配图片地址程序代码

    取所有内容中图片的地址我们必须使用正则表达式来匹配了,如果不使用它来匹配我们是无法获取到或才能获取到也是非常的麻烦了,下面我们一起来看看我整理了几段匹配图片地...2016-11-25
  • preg_match 与 preg_match_all区别和详细用法

    本文章来给各位同学介绍关于在php中的两个正则函数preg_match 与 preg_match_all区别和详细用法 正则表达式在 PHP 中的应用在 PHP 应用中,正则表达式主要用于: 正...2016-11-25