php正则表达式之preg_match()用法

 更新时间:2016年11月25日 15:05  点击:2162
利用 preg_match(),我们可以完成字符串的规则匹配。如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。还有一个可选的第三参数可以让你把匹配的部分存在一个数组中。在验证数据时这个功能可以变得非常有用。
 代码如下 复制代码

<?php

// 模式定界符后面的 "i" 表示不区分大小写字母的搜索

if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {

print "A match was found.";

} else {

print "A match was not found.";

}

?>

取得当前时间

 代码如下 复制代码

<?php

//需要匹配的字符串。date函数返回当前时间。 "现在时刻:2012-04-20 07:31 am"

$content = "现在时刻:".date("Y-m-d h:i a");

//匹配日期和时间.

if (preg_match ("/d{4}-d{2}-d{2} d{2}:d{2} [ap]m/", $content, $m))

{

echo "匹配的时间是:" .$m[0]. "n"; //"2012-04-20 07:31 am"

}

//分别取得日期和时间

if (preg_match ("/([d-]{10}) ([d:]{5} [ap]m)/", $content, $m))

{

echo "当前日期是:" .$m[1]. "n"; //"2012-04-20"

echo "当前时间是:" .$m[2]. "n"; //"07:31 am"

}

?>


这个例子将验证出此 Email 地址为正确格式。现在让我们来看看这段正则表达式所代表的各种规则。

获取Google首页title
比如说要获取google首页的title内容,代码如下:

 代码如下 复制代码

<?php
$str = file_get_contents('http://www.google.com');
preg_match('/<title>(.*)</title>/', $str, $arr);
echo $arr[1];
?>

从网址获取域名

 代码如下 复制代码
<?php
preg_match("/^(http://)?([^/]+)/i", "http://www.111cn.net/index.html", $matches);
$host = $matches[2]; // 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "domain name is: {$matches[0]}n";
?>

preg_match($pattern,$string,$matcher)其中$pattern对应的就是/^(http://)?([^/]+)/i,$string 是http://www.php.net/index.html,$match是匹配到的结果。

如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。

$matches[0] 将包含与整个模式匹配的文本。咱们用pring_r打印出来第一个$matches:

 代码如下 复制代码

Array (
 [0] => http://www.111cn.net
 [1] => http://
 [2] => www.111cn.net )


$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本。在正则中,()代表模式:匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。就是说数组中下标为1的值就是正则中/^(http://)?([^/]+)/i第一个()里的值!数组下标2的值以此类推。

cookie是所有程序开发中会有的一种东西,下面我来介绍cookie设置(SetCookie) 删除($_COOKIE) 登录用法。

1、设置Cookie

PHP用SetCookie函数来设置Cookie。必须注意的一点是:Cookie是HTTP协议头的一部分,用于浏览器和服务器之间传递信息,所以必须在任何属于HTML文件本身的内容输出之前调用Cookie函数。

SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下:

int SetCookie(string name, string value, int expire, string path, string domain, int secure);
除 了name之外所有的参数都是可选的。value,path,domain三个参数可以用空字符串代换,表示没有设置;expire 和 secure两个参数是数值型的,可以用0表示。expire参数是一个标准的Unix时间标记,可以用time()或mktime()函数取得,以秒为 单位。secure参数表示这个Cookie是否通过加密的HTTPS协议在网络上传输。

当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到.这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器的原因。

在同一个页面设置Cookie,实际是从后往前,所以如果要在插入一个新的Cookie之前删掉一个,你必须先写插入的语句,再写删除的语句,否则可能会出现不希望的结果。

来看几个例子:

如何创建 cookie?
setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

语法
setcookie(name, value, expire, path, domain);

简单的:

 代码如下 复制代码

SetCookie(“MyCookie”, “Value of MyCookie”);

带失效时间的:

SetCookie(“WithExpire”, “Expire in 1 hour”, time()+3600);//3600秒=1小时

什么都有的:

SetCookie(“FullCookie”, “Full cookie value”, time()+3600, “/forum”, “.phpuser.com”, 1);

这里还有一点要说明 的,比如你的站点有几个不同的目录,那么如果只用不带路径的Cookie的话,在一个目录下的页面里设的Cookie在另一 个目录的页面里是看不到的,也就是说,Cookie是面向路径的。实际上,即使没有指定路径,WEB服务器会自动传递当前的路径给浏览器的,指定路径会强 制服务器使用设置的路径。解决这个问题的办法是在调用SetCookie时加上路径和域名,域名的格式可以是“www.phpuser.com”,也可是 “.phpuser.com”。

SetCookie 函数里表示value的部分,在传递时会自动被encode,也就是说,如果 value的值是“test value”在传递时就变成了“test%20value”,跟URL的方法一样。当然,对于程序来说这是透明的,因为在PHP接收Cookie的值时会 自动将其decode。

如果要设置同名的多个Cookie,要用数组,方法是:

 代码如下 复制代码

SetCookie(“CookieArray[]“, “Value 1″);

SetCookie(“CookieArray[]“, “Value 2″);

SetCookie(“CookieArray[0]“, “Value 1″);

SetCookie(“CookieArray[1]“, “Value 2″);

2、接收和处理Cookie

PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟FORM变量的原则一样,特别简单。

比如设置一个名为 MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$ myCookie,这个变量的值就是Cookie的值。数组同样适用。另外一个办法是引用PHP的全局变量$HTTP_COOKIE_VARS数组。

分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)

 代码如下 复制代码

echo $MyCookie;

echo $CookieArray[0];

echo count($CookieArray

如何取回 Cookie 的值?
PHP 的 $_COOKIE 变量用于取回 cookie 的值。

在下面的例子中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:

 代码如下 复制代码

<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>

在下面的例子中,我们使用 isset() 函数来确认是否已设置了 cookie:

 代码如下 复制代码

<html>
<body>

<?php
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
  echo "Welcome guest!<br />";
?>

</body>
</html>

如何删除 cookie?
当删除 cookie 时,您应当使过期日期变更为过去的时间点。

删除的例子:

 代码如下 复制代码

<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>

例子

php cookie来设置用户登陆的时间与过期时间代码哦

 代码如下 复制代码

function loginCookie($uid,$name,$group,$ip,$time)
{
 global $site_domain,$login_key;
 
 $domain = (substr($site_domain,0,4) == "www.") ? substr($site_domain,3) : ".".$site_domain;

 $secure = Xxtea::encrypt($uid."|".$name."|".$group."|".$ip,$login_key);

 setcookie("userId",$uid,$time+86400,"/",$domain);

 setcookie("userName",$name,$time+86400,"/",$domain);

 setcookie("userGroup",$group,$time+86400,"/",$domain);
  
 setcookie("userSecure",$secure,$time+86400,"/",$domain);
}

更多详细内容请查看:http://www.111cn.net/phper/18/1b5df18d38cfea1a63282c367f6cdf63.htm

现在在php跳出循环方法有几种,一种是使用goto另一种是使用php新特性goto命令哦,下面我来一下介绍介绍。

break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环

//php当前循环为1,循环由里到外依次递增,break默认为1,例如跳出第2层循环

 代码如下 复制代码
for ($i=0;$i<3;$i++){
    foreach (array(1,2,3) as $val){    
        foreach (array(1,2,3) as $val){         
            echo "1层循环<br/>"; 
            break 2;  //跳出第2层循环        
        }
        echo "2层循环<br/>";
    }
    echo "3层循环<br/>";
}

//结果:
//1层循环
//3层循环
//1层循环
//3层循环
//1层循环
//3层循环

goto
goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。
下面的是一个使用了goto跳出循环的例子

 代码如下 复制代码
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) <= 29){
goto a;
}
echo “$i”;
}
a:
echo” this is the end”;

例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29

setcookie() 函数是php中一个用来设置cookie值的一个函数,下面我来总结一下setcookie() 函数的具体用法以及设置之后怎么获取cookie的值。

setcookie() 函数向客户端发送一个 HTTP cookie。

cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。

cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。

必须在任何其他输出发送前对 cookie 进行赋值。

如果成功,则该函数返回 true,否则返回 false。

语法
setcookie(name,value,expire,path,domain,secure)

 代码如下 复制代码

makecookie('111','www.111cn.net');
//清除cookie
clearcookies();

//下面兴一个支持二级域名cookie函数吧。

function setcookielive($name, $value='', $expire=0, $path='', $domain='', $secure=false, $httponly=false) {
    //set a cookie as usual, but also add it to $_cookie so the current page load has access
    $_cookie[$name] = $value;
    return setcookie($name,$value,$expire,$path,$domain,$secure,$httponly);
}
//调用方法

setcookielive('webab','111cn',time()+86000,'/','111cn.net');

//一入门级cookie设置方法

setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");

// after the page reloads, print them out
if (isset($_cookie['cookie'])) {
    foreach ($_cookie['cookie'] as $name => $value) {
        echo "$name : $value <br />n";
    }
}

js获取 cookie方法

 代码如下 复制代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
//get cookie
function getCookie(name) {
     var nameEQ = name + "=";
     var ca = document.cookie.split(';');
     for(var i=0;i < ca.length;i++) {
         var c = ca[i];
         while (c.charAt(0)==' ') {
             c = c.substring(1,c.length);
         }
         if (c.indexOf(nameEQ) == 0) {
             return unescape(c.substring(nameEQ.length,c.length));
         }
     }
     return false;
}

//clear cookie
function clearCookie(name) {
    setCookie(name, "", -1);
}

//set cookie
function setCookie(name, value, seconds) {
     seconds = seconds || 0;
     var expires = "";
     if (seconds != 0 ) {
         var date = new Date();
         date.setTime(date.getTime()+(seconds*1000));
         expires = "; expires="+date.toGMTString();
     }
     document.cookie = name+"="+escape(value)+expires+"; path=/";
}
alert(getCookie('test2'));
</script>
</body>
</html>

下面我们来介绍一下关于var_export 与 var_dump用法,有需要的朋友可参考。

var_export必须返回合法的php代码, 也就是说,var_export返回的代码,可以直接当作php代码赋值个一个变量。 而这个变量就会取得和被var_export一样的类型的值

•但是, 当变量类型为resource的时候, 是无法简单copy复制的,所以, 当var_export的变量是resource类型时, var_export会返回NULL

实例

 代码如下 复制代码

$res = yblog_mspconfiginit("ratings");
var_dump($res);
var_export($res);结果:

resource(1) of type (yahoo_yblog)
NULL再比如:

$res = fopen('status.html', 'r');
var_dump($res);
var_export($res);结果:

resource(2) of type (stream)
NULL

实例

 代码如下 复制代码

<?
//php var_export读写实例类
class user{
 var $filepath;
 function __()
 {
  $this->filepath = "d:/www.111cn.net/group/";
 }
 function cache() {
  $array = $this->db->select('select group_id,group_name from group','hashmap');
  $fp = fopen ($this->filepath, 'w');
  fputs($fp, '<?php return ' . var_export($array, true) . ';?>');
  fclose($fp);
 }

 function getVar_export($value) {
  $array = require($this->filepath);
  foreach ($array as $key => $v) {
   if ($key==$value) {
    $selected = ' current option';
   } else {
    $selected = '';
   }
   $html .= '<option value="' . $key . '"' . $selected . '>' . $v . '</option>';
  }
 
  return $html;
 }
}

//使用实例方法

$g = new user();
if( intval( $_GET['iscreate']) )
{
 $g->cache();
}
else
{
 $g->getVar_export('vv');
}
//本站原创www.111cn.net转载注明来源
?>

更多详细内容请查看:http://www.111cn.net/phper/21/02496253b66d66ca613a2f19ea40c22e.htm


var_dump函数
var_dump   (PHP 3 >= 3.0.5, PHP 4, PHP 5)   

var_dump -- 打印变量的相关信息

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

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。   

提示: 为了防止程序直接将结果输出到浏览器,可以使用输出控制函数(output-control functions)来捕获此函数的输出,并把它们保存到一个例如 string 类型的变量中。   


可以比较一下 var_dump() 与 print_r()。


例子

 代码如下 复制代码

 代码如下 复制代码

  <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>

 

更多详细内容请查看:http://www.111cn.net/phper/php/43382.htm

[!--infotagslink--]

相关文章

  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • JS基于正则截取替换特定字符之间字符串操作示例

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

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • js正则学习小记之匹配字符串字面量

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

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • C# 中使用正则表达式匹配字符的含义

    正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • Python验证的50个常见正则表达式

    这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25