PHP使用preg_split()分割特殊字符(元字符等)的方法分析

 更新时间:2017年7月6日 23:50  点击:1914
小编推荐的这篇文章介绍了PHP使用preg_split()分割特殊字符(元字符等)的方法分析,非常实用,有兴趣的朋友快来看看吧。

本文实例讲述了PHP使用preg_split()分割特殊字符(元字符等)的方法。分享给大家供大家参考,具体如下:

这里所说的特殊字符就是正则中使用的特殊字符,如: | . + 等

其它的先不说,来个实例:

 代码如下复制代码

$pattern="/[,-\\|\\.]/";

$subject="aaa,bbb,ccc-ddd-eee-fff|ggg|hhh.iii.jjj.kkk";

$spr=preg_split($pattern,$subject);

print_r($spr);

结果:

Array ( [0] => [1] => [2] =>  [3] => [4] => [5] => [6] => [7] => [8] => [9] =>  [10] => [11] => [12] => [13] => [14] => [15] => [16]  => [17] => [18] => [19] => [20] => [21] => [22] =>  [23] => [24] => [25] => [26] => [27] => [28] => [29]  => [30] => [31] => [32] => [33] => [34] => [35] =>  [36] => [37] => [38] => [39] => [40] => [41] => [42]  => [43] => )

很显然,这不是我们想要的结果,郁闷了好一会,才找到是什么原因:

把正则表达式内的特殊字符放到前面就没事了, 也就是

$pattern="/[\\|\\.,-]/";

结果:

Array ( [0] => aaa [1] => bbb [2]  => ccc [3] => ddd [4] => eee [5] => fff [6] => ggg [7]  => hhh [8] => iii [9] => jjj [10] => kkk )

好了,这就是我们要的结果了

总结:当使用正则表达式中的元字符,普通字符进行 [ ]内的多个字符分割的时候,要把待转义的元字符放在前面.

本文详细介绍了用PHP的socket实现客户端到服务端的通信实例详解,非常实用,有兴趣的同学快来看看吧

一、server.php服务端:

 代码如下 复制代码

<?php

error_reporting(E_ALL);

set_time_limit(0);

ob_implicit_flush();

//本地IP

$address='localhost';

//设置用111端口进行通信

$port= 111;

//创建SOCKET

if(($sock= socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {

    echo"socket创建失败原因 ". socket_strerror($sock) ."\n";

}

  

if(($ret= socket_bind($sock,$address,$port)) < 0) {

    echo"创建套接字失败原因 ". socket_strerror($ret) ."\n";

}

//监听

if(($ret= socket_listen($sock, 5)) < 0) {

    echo"监听失败原因 ". socket_strerror($ret) ."\n";

}

do{

  //接收命令 

  if(($msgsock= @socket_accept($sock)) < 0) {

    echo"命令接收失败原因: ". socket_strerror($msgsock) ."\n";

    break;

  }

  $msg="\nPHP Test Server. \n"."用quit,shutdown,sun...等命令测试.\n";

  

  @socket_write($msgsock,$msg,strlen($msg));

  

  do{

    if(false === ($buf= @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {

        echo"socket_read() failed: reason: ". socket_strerror($ret) ."\n";

        break2;

    }

    if(!$buf= trim($buf)) {

        continue;

    }

    if($buf=='quit') {

        break;

    }

    if($buf=='shutdown') {

        socket_close($msgsock);

        break2;

    }

    if($buf=='sun') {

        echo'what are you doing?';

    }

    $talkback="Backinformation : '$buf'.\n";

    socket_write($msgsock,$talkback,strlen($talkback));

    echo"$buf\n";

  }while(true);

  

  socket_close($msgsock);

  

}while(true);

  

socket_close($sock);

?>

二、client.php客户端:

 代码如下 复制代码

<?php

error_reporting(E_ALL);

//端口111

$service_port= 111;

//本地

$address='localhost';

//创建 TCP/IP socket

$socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if($socket< 0) {

    echo"socket创建失败原因: ". socket_strerror($socket) ."\n";

}else{

    echo"OK,HE HE.\n";

}

$result= socket_connect($socket,$address,$service_port);

if($result< 0) {

    echo"SOCKET连接失败原因: ($result) ". socket_strerror($result) ."\n";

}else{

    echo"OK.\n";

}

//发送命令

$in="HEAD / HTTP/1.1\r\n";

$in.="Connection: Close\r\n\r\n";

$out='';

echo"Send Command..........";

$in="sun\n";

socket_write($socket,$in,strlen($in));

echo"OK.\n";

echo"Reading Backinformatin:\n\n";

while($out= socket_read($socket, 2048)) {

    echo$out;

}

echo"Close socket........";

socket_close($socket);

echo"OK,He He.\n\n";

?>

这两段代码是简单介绍用PHP实现客户端和服务端的通信

具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..

再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....

本文介绍了详谈PHP中的密码安全性Password Hashing,非常实用,不会的同学可以参考一下

如果你还在用md5加密,建议看看下方密码加密和验证方式。

先看一个简单的Password Hashing例子:

 代码如下 复制代码

<?php

 

//require 'password.php';

/**

 * 正确的密码是secret-password

 * $passwordHash 是hash 后存储的密码

 * password_verify()用于将用户输入的密码和数据库存储的密码比对。成功返回true,否则false

 */

$passwordHash= password_hash('secret-password', PASSWORD_DEFAULT);

echo$passwordHash;

if(password_verify('bad-password',$passwordHash)) {

  // Correct Password

  echo'Correct Password';

}else{

  echo'Wrong password';

  // Wrong password

}

下方代码提供了一个完整的模拟的 User 类,在这个类中,通过使用Password Hashing,既能安全地处理用户的密码,又能支持未来不断变化的安全需求。

 代码如下 复制代码

<?php

classUser

{

  // Store password options so that rehash & hash can share them:

  constHASH = PASSWORD_DEFAULT;

  constCOST = 14;//可以确定该算法应多复杂,进而确定生成哈希值将花费多长时间。(将此值视为更改算法本身重新运行的次数,以减缓计算。)

 

  // Internal data storage about the user:

  public$data;

 

  // Mock constructor:

  publicfunction__construct() {

    // Read data from the database, storing it into $data such as:

    // $data->passwordHash and $data->username

    $this->data =newstdClass();

    $this->data->passwordHash ='dbd014125a4bad51db85f27279f1040a';

  }

 

  // Mock save functionality

  publicfunctionsave() {

    // Store the data from $data back into the database

  }

 

  // Allow for changing a new password:

  publicfunctionsetPassword($password) {

    $this->data->passwordHash = password_hash($password, self::HASH, ['cost'=> self::COST]);

  }

 

  // Logic for logging a user in:

  publicfunctionlogin($password) {

    // First see if they gave the right password:

    echo"Login: ",$this->data->passwordHash,"\n";

    if(password_verify($password,$this->data->passwordHash)) {

      // Success - Now see if their password needs rehashed

      if(password_needs_rehash($this->data->passwordHash, self::HASH, ['cost'=> self::COST])) {

        // We need to rehash the password, and save it. Just call setPassword

        $this->setPassword($password);

        $this->save();

      }

      returntrue;// Or do what you need to mark the user as logged in.

    }

    returnfalse;

  }

}

小编介绍的这篇文章写了php、mysql查询当天,查询本周,查询本月的数据实例,非常实用,不会的同学可以参考一下。

php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)

 代码如下 复制代码

//其中 video 是表名;

//createtime 是字段;

//

//数据库time字段为时间戳

//

//查询当天:

 

$start=date('Y-m-d 00:00:00');

$end=date('Y-m-d H:i:s');

SELECT * FROM `table_name` WHERE `time` >= unix_timestamp('$start') AND `time` <= unix_timestamp('$end')

 

//查询本周:

 

SELECT yearweek('2011-04-17 15:38:22',1 )//结果是201115

SELECT yearweek('2011-04-17 15:38:22')//结果是201116

//yearweek的第2个参数设置为1的原因是,中国人习惯把周1作为本周的第一天

//另外补充下:

//2011-04-17 是周日。

SELECT dayofweek('2011-04-17 15:38:22')// 查询出的是1,把礼拜天作为一周的第一天。

SELECT dayofweek('2011-04-18 15:38:22')//查询出的是2

SELECT weekday('2011-04-17 15:38:22')// 查询出的是6,

SELECT weekday('2011-04-18 15:38:22')// 查询出的是0,

//所以建议使用weekday,查询出来的结果+1就可以了,就比较符合国人的习惯了。

 

SELECT * FROM `table_name` WHERE YEARWEEK( FROM_UNIXTIME( `time`,'%Y-%m-%d %H:%i:%s') ,1) = YEARWEEK( now( ),1 )

 

//查询本月:

 

$start=date('Y-m-01 00:00:00');

$end=date('Y-m-d H:i:s');

SELECT * FROM `table_name` WHERE `time` >= unix_timestamp('&rdquo;.$start.&rdquo;') AND `time` <= unix_timestamp('$end')

 

//查询本年:

 

$start=date('Y-01-01 00:00:00');

$end=date('Y-m-d H:i:s');

SELECT * FROM `table_name` WHERE `time` >= unix_timestamp('$start') AND `time` <= unix_timestamp('$end')

php 获取今日、昨日、上周、本月的起始时间戳和结束时间

 代码如下 复制代码

<?php

//<!--php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime()。-->

 

 

//1、php获取今日开始时间戳和结束时间戳

 

$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));

$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;

 

echo$beginToday.'---'.$endToday;

echo'<br/>';

//2、php获取昨日起始时间戳和结束时间戳

 

$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));

$endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;

 

echo$beginYesterday.'---'.$endYesterday;

echo'<br/>';

//3、php获取上周起始时间戳和结束时间戳

 

$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));

$endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));

 

echo$beginLastweek.'---'.$endLastweek;

echo'<br/>';

 

//4、php获取本月起始时间戳和结束时间戳

 

$beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));

$endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));

 

echo$beginThismonth.'---'.$endThismonth;

echo'<br/>';

 

 

//PHP mktime() 函数用于返回一个日期的 Unix 时间戳。

//语法:mktime(hour,minute,second,month,day,year,is_dst)

//

//参数    描述

//hour    可选。规定小时。

//minute    可选。规定分钟。

//second    可选。规定秒。

//month    可选。规定用数字表示的月。

//day    可选。规定天。

//year    可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。

//is_dst可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。

//自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。

//

//参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。

 

echo(date("M-d-Y",mktime(0,0,0,12,36,2001)));

 

//将输出结果如:

//

//Jan-05-2002

[!--infotagslink--]

相关文章

  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • php类的使用实例教程

    php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
  • 双冒号 ::在PHP中的使用情况

    前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08
  • PHP mysql与mysqli事务使用说明 分享

    mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。...2013-10-02
  • Postman安装与使用详细教程 附postman离线安装包

    这篇文章主要介绍了Postman安装与使用详细教程 附postman离线安装包,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-05
  • 浅析Promise的介绍及基本用法

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
  • 使用jquery修改表单的提交地址基本思路

    基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07
  • vs2019安装和使用详细图文教程

    这篇文章主要介绍了vs2019安装和使用详细图文教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25