当前位置:  编程技术>php
本页文章导读:
    ▪php常用正则表达式与基础知识      php正则基础 $mode = "/^1[358]\d{9}/i"; 匹配模块必须以 / / 开始和结束,第二个 / 后可以加模式修正符 原子 ①a-z A-Z _ 0-9 //最常见的字符 ②(abc) //用圆括号括起来起来的单元符号 ③[abcs] [^abd] //用.........
    ▪php邮箱验证类及正则匹配域名验证的实例代码      完整代码如下:   代码示例: <?php   /**    * function getmxrr    * 获取指定域名的MX记录信息    * edit www.   */   function win_getmxrr($hostname, &$mxhosts, &$mxweight=false)   {      if (strtou.........
    ▪php常用正则表达式(日期 电话 中文 邮箱等)      1,匹配中文字符的正则表达式: [u4e00-u9fa5]   说明:匹配中文还真是个头疼的事,有了这个表达式就好办了     2,匹配双字节字符(包括汉字在内):[^x00-xff]   说明:可以用来计算字.........

[1]php常用正则表达式与基础知识
    来源: 互联网  发布时间: 2013-12-24

php正则基础

$mode = "/^1[358]\d{9}/i";

匹配模块必须以 / / 开始和结束,第二个 / 后可以加模式修正符

原子
①a-z A-Z _ 0-9 //最常见的字符
②(abc) //用圆括号括起来起来的单元符号
③[abcs] [^abd] //用方括号括起来的原子表,
原子表中的^代表排除或相反内容。

\d 包含所有数字[0-9]
\D 除所有数字外[^0-9]
\w 包含所有英文字符[a-zA-Z_0-9]
\W 除所有英文字符外[^a-zA-Z_0-9]
\s 包含空白区域如回车、换行、分页等 [\f\n\r]

元字符

* 匹配前一个内容的0次1次或多次
+ 1次或多次
? 0次或1次
. 代表任意一个字符(除了回车换行)
| 相当与php的 || (“或”的意思)
^ 强制匹配字符串首部内容
$ 强制匹配字符串尾部内容
[^abc] 匹配除了a或b或c之外的内容
\b 匹配单词边界,边界可以是空格或者特殊符号
\B 匹配除带单词边界以外的内容
{m} 匹配前一个内容的重复次数为M次
{m,} 匹配前一个内容的重复次数大于等于M次
{m,n} 匹配前一个内容的重复次数M次到N次
( ) 整体匹配,并放入内存,可使用\\1 或 \\2 …依次获取

优先级:依次降低

( ) 圆括号因为是内存处理所以最高
* ? + { } 重复匹配内容其次
^ $ \b 边界处理第三
| 条件处理第四

最后按照运算顺序计算匹配

常用修正符: $mode = "/正则/U";
i 正则内容在匹配时候不区分大小写(默认是区分的)
m 在匹配首内容或者尾内容时候采用多行识别匹配
S 将回车转化为空格
x 忽略正则中的空白
A 强制从头开始匹配
D 强制$匹配尾部无任何内容 \n
U 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束,常用在采集程序上的正则表达式

应用
preg_match_all ( string pattern, string subject, array matches [, int flags] )
截取比较详细的内容,采集网页,分析文本
preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
提示 1、替换内容可以是一个正则也可以是数组正则

2、替换内容可以通过修正符e来解决替换执行内容
preg_split ( string pattern, string subject [, int limit [, int flags]] )
通过正则表达式来切割相关内容,类似之前学过的explode()切割函数,但explode
只能按照一种方式切割有局限性。

例子:

代码示例:
<?php
$mode = "/^[a-z][-_\.]?[a-z\d]*@[a-z0-9]+[\.][a-z]{2,4}/i";
$str = a12345@;
echo $str.'<hr>';
if(preg_match($mode, $str, $arr)){
echo 'succeed -- <font color=red>'.$arr[0];
}else{
echo 'failed';
}
?>

手机号码:

代码示例:
$mode = "/^1[358]\d{9}/";

邮箱地址:

代码示例:
$mode = "/^[a-z][-_\.]?[a-z\d]*@[a-z0-9]+[\.][a-z]{2,4}/i";

    
[2]php邮箱验证类及正则匹配域名验证的实例代码
    来源: 互联网  发布时间: 2013-12-24

完整代码如下:
 

代码示例:
<?php
  /**
   * function getmxrr
   * 获取指定域名的MX记录信息
   * edit www.
  */
  function win_getmxrr($hostname, &$mxhosts, &$mxweight=false)
  {
     if (strtoupper()(substr(PHP_OS, 0, 3)) != 'WIN') return;
     if (!is_array ($mxhosts) ) $mxhosts = array();
     if (empty($hostname)) return;
     $exec='nslookup -type=MX '.escapeshellarg($hostname);
     @exec($exec, $output);
     if (empty($output)) return;
     $i=-1;
     foreach ($output as $line) {
         $i++;
         if (preg_match("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.+)$/i", $line, $parts)) {
           $mxweight[$i] = trim($parts[1]);
           $mxhosts[$i] = trim($parts[2]);
         }
         if (preg_match('/responsible mail addr = (.+)$/i', $line, $parts)) {
           $mxweight[$i] = $i;
           $mxhosts[$i] = trim($parts[1]);
         }
     }
     return ($i!=-1);
  }
  if (!function_exists('getmxrr')) {
     function getmxrr($hostname, &$mxhosts, &$mxweight=false) {
         return win_getmxrr($hostname, $mxhosts, $mxweight);
     }
  }
 
  /**
   * class EmailLinker
   * 邮箱验证类,正则匹配邮箱地址并对域名是否有MX解析进行验证
  */
  class EmailLinker
  {
      CONST CONN_TIMEOUT = 10;
      CONST READ_TIMEOUT = 5;
      CONST SMTP_PORT = 25;
      private $email;
      function __construct($email)
      {
          $this->email = $email;
          $this->redirectIfNeeded();
      }
      //重定向邮箱地址
      function redirectIfNeeded()
      {
          if(array_key_exists('mail',$_GET) && $this->email == base64_decode($_GET['mail']) ){
              header('Location: mailto:'.$this->email);
              exit;
          }   
      }
 
      //回调返回邮箱地址
      public function link()
      {
          if($this->isValid()){
              $encoded = base64_encode($this->email);
              return '<a href="/blog_article/mail/.html'.urlencode($encoded).'" target="_blank">Email:'.$this->email.'</a>';
          }
      }
      //获取邮箱地址并验证
      public function isValid($mail = '')
      {
              static $valid = null;
              if($mail){
                  return ( $this->getParts() != null );
              }
              if($valid !== null){
                  return $valid;
              }
              if($parts = $this->getParts()){
                  $valid = $this->validateUser($parts['host'],$parts['user']);
              }
              return $valid;
      }
      private function validateUser($hostname,$user)
      {
          if($sock = $this->openSMTPSocket($hostname)){
              $this->smtpSend($sock,"HELO $hostname");
              $resp  = $this->smtpSend($sock,"MALL FROM: <$user@$hostname>");
              //$resp  = $this->smtpSend($sock,"RCPT TO:<$user@$hostname>"); //这一步可能被ISP过滤了,导致邮箱验证不成功
              $vaild = (preg_match('/250|451|452\s/',$resp) == 1);
              fclose($sock);
              return $vaild;
          }else{
              return false;
          }
      }
      private function openSMTPSocket($hostname)
      {
          $hosts = $this->getMX($hostname);
          foreach($hosts as $host => $weight)
          {
              if($sock = @fsockopen($host,self::SMTP_PORT,$errno,$errstr,self::CONN_TIMEOUT))
              {
                  stream_set_timeout($sock,self::READ_TIMEOUT);
                  return $sock;
              }
          }
      }
      private function getMX($hostname)
      {
          $host = array();
          $weights = array();
          getmxrr($hostname,$hosts,$weights);
 
          $results = array();
          foreach($hosts as $i => $host)
          {
              $results[$host] = $weights[$i];
          }
          arsort($results,SORT_NUMERIC);
          $results[$hostname] = 0;
          return $results;
      }
      private function smtpSend($sock,$data)
      {
          fwrite($sock,"$data\r\n");
          return fgets($sock,1024);
      }
     
      //正则匹配
      private function getParts()
      {
          //$emailRegex = '/\w+([-+.]\w+)*@\w+([-.]\w)*\.\w+([-.]\w+)*/x';
          $emailRegex = <<<__REGEX__
          /(?P<user>
              \w+([-+.]\w+)*
           )@(?P<host>
               \w+([-.]\w)*\.\w+([-.]\w+)*
           )/x
  __REGEX__;
          return (preg_match($emailRegex,$this->email,$matches))? $matches : null ;
      }
 
  }
  $emailLinker_class = new EmailLinker('790896688@qq.com');
  echo $emailLinker_class->link(); 
?>

您可能感兴趣的文章:
php邮箱检测的正则表达式一例
php正则验证email邮箱及抽取内容中email的例子
php常用正则表达式(日期 电话 中文 邮箱等)
php写的用来检测手机邮箱用户名的类
验证用户输入的邮箱有效性与正确性的php代码


    
[3]php常用正则表达式(日期 电话 中文 邮箱等)
    来源: 互联网  发布时间: 2013-12-24

1,匹配中文字符的正则表达式: [u4e00-u9fa5]  
说明:匹配中文还真是个头疼的事,有了这个表达式就好办了  
 
2,匹配双字节字符(包括汉字在内):[^x00-xff]  
说明:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)  
 
3,匹配空白行的正则表达式:ns*r  
说明:可以用来删除空白行  
 
4,匹配HTML标记的正则表达式: <(S*?)[^>]*>.*? </1> | <.*? />  
说明:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力  
 
5,匹配首尾空白字符的正则表达式:^s* |s*$  
说明:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式  
 
6,匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*  
说明:表单验证时很实用  
 
7,匹配网址URL的正则表达式:[a-zA-z]+://[^s]*  
说明:网上流传的版本功能很有限,上面这个基本可以满足需求  
 
8,匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$  
说明:表单验证时很实用  
 
9,匹配国内电话号码:d{3}-d{8} |d{4}-d{7}  
说明:匹配形式如 0511-4405222 或 021-87888822  
 
10,匹配腾讯QQ号:[1-9][0-9]{4,}  
说明:腾讯QQ号从10000开始  
 
11,匹配中国邮政编码:[1-9]d{5}(?!d)  
说明:中国邮政编码为6位数字  
 
12,匹配身份证:d{15} |d{18}  
说明:中国的身份证为15位或18位  
 
13,匹配ip地址:d+.d+.d+.d+  
说明:提取ip地址时有用  
 
14,匹配特定数字:  
 

^[1-9]d*$    //匹配正整数  
^-[1-9]d*$   //匹配负整数  
^-?[1-9]d*$   //匹配整数  
^[1-9]d* |0$  //匹配非负整数(正整数 + 0)  
^-[1-9]d* |0$   //匹配非正整数(负整数 + 0)  
^[1-9]d*.d* |0.d*[1-9]d*$   //匹配正浮点数  
^-([1-9]d*.d* |0.d*[1-9]d*)$  //匹配负浮点数  
^-?([1-9]d*.d* |0.d*[1-9]d* |0?.0+ |0)$  //匹配浮点数  
^[1-9]d*.d* |0.d*[1-9]d* |0?.0+ |0$   //匹配非负浮点数(正浮点数 + 0)  
^(-([1-9]d*.d* |0.d*[1-9]d*)) |0?.0+ |0$  //匹配非正浮点数(负浮点数 + 0)

说明:处理大量数据时有用,具体应用时注意修正  
 
15,匹配特定字符串:  
 

^[A-Za-z]+$  //匹配由26个英文字母组成的字符串  
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串  
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串  
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串  
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

16,PHP正则匹配日期

$subject = '2011-01-01 38:20:26|1012657|4| |1';
$hour = rand(10,23);
$hour = (strlen($hour)>1) ? $hour : "0{$hour}";
print_r(preg_replace('/(\d+)-(\d+)-(\d+) (\d+)/', '${1}-${2}-${3} '.$hour, $subject));

就介绍这些了,挺实用的php正则匹配格式,需要的时候打开看看,说不定可以帮上大忙。

您可能感兴趣的文章:
php邮箱检测的正则表达式一例
php正则验证email邮箱及抽取内容中email的例子
php邮箱验证类及正则匹配域名验证的实例代码
php写的用来检测手机邮箱用户名的类
验证用户输入的邮箱有效性与正确性的php代码


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪PHP函数microtime()时间戳的定义与用法 iis7站长之家
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3