`
aslijiasheng
  • 浏览: 57029 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正则 &preg_match

    博客分类:
  • php
 
阅读更多
<?php
/*preg_match
可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,
以此类推  */


$mode='/(^[\w\.\_]{2,6})@(\w{4,}).([a-z]{2,10})/';
$email='matg@gmail.com';
$matches = array(); 
if (preg_match($mode, $email,$matches)){
echo '匹配字符串';
 var_dump($matches);
//array(4) { [0]=> string(14) "matg@gmail.com" [1]=> string(4) "matg" [2]=> string(5) "gmail" [3]=> string(3) "com" }
}else{
echo '错误,请重新输入';
 var_dump($matches);
}
/*
说明,[\w\.\_] 相当于[0-9a-zA-Z\.\_] ,就是比\w多匹配 '.' 和 '_'两种字符
不等与 [\w._] 因为 . 匹配除换行任何字符 而不是“ .”
(^[\w\.\_]{2,6}) 就是 数字 或字母 或'.''_' 出现 两次 到六次   例如  .. 是匹配的
*/

/*
定界符,通常使用 "/"做为定界符开始和结束,也可以使用"#"。
什么时候使用"#"呢?一般是在你的字符串中有很多"/"字符的时候,因为正则的时候这种字符需要转义
*/
$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i'; 
//$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i';    //$是以.html结尾
//后一个"i"就是修饰符,表示忽略大小写,还有一个"x"表示忽略空格。
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html'; 
$matches = array(); 
if(preg_match($regex, $str, $matches)){ 
    var_dump($matches); 

  
echo "<br>";


//通配符(lookarounds):断言某些字符串中某些字符的存在与否!
/*
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
*/
$regex = '/(?<=c)d(?=e)/';  /* d 前面紧跟c, d 后面紧跟e*/
$str = 'abcdefgk'; 
$matches = array(); 
  
if(preg_match($regex, $str, $matches)){ 
    var_dump($matches); //输出 d

  
echo "\n"; 

//否定意义:

$regex = '/(?<!c)d(?!e)/';  /* d 前面不紧跟c, d 后面不紧跟e*/
$str = 'abcdefgk'; 
$matches = array(); 
  
if(preg_match($regex, $str, $matches)){ 
    var_dump($matches); // 没有输出

  
echo "<br>"; 

$regex = '/(25[0-5])/';  /* d 前面不紧跟c, d 后面不紧跟e*/
$str = '182'; 
$matches = array(); 
  
if(preg_match($regex, $str, $matches)){ 
    var_dump($matches); // 

  
echo "\n"; 

?>
<?php 
/*
限定符:
如[\w]{3,5}或者[\w]*或者[\w]+这些[\w]后面的符号都表示限定符。现介绍具体意义。

     {3,5}表示3到5个字符。{3,}超过3个字符,{,5}最多5个,{3}三个字符。
     
     
 特殊殊字符 解释 
     * 0到多次 
     + 1到多次还可以写成{1,} 
     ? 0或1次 
     . 匹配除换行符外的所有单个的字符 
     \w [a-zA-Z0-9_] 
     \s 空白字符(空格,换行符,回车符)[\t\n\r] 
     \d [0-9] 
     
     
字符域: [\w]用方括号扩起来的部分就是字符域。

脱字符号 ^:

           ^放在字符域(如:[^\w])中表示否定(不包括的意思)——“反向选择”

           ^ 放在表达式之前,表示以当前这个字符开始。(/^n/i,表示以n开头)。
           


*/
?>
 
$ip_ereg = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
 
解读: 以25X  (25)不是【25】 中括号是代表任何其中之一 &&  X为(012345)任何一个 即 251, 252,253,254,255,
         或 2 xy  X为任何01234任何一个,Y 是也是0123456789任何一个 例如 213
           或 0或1 匹配 0次或1次   [0-9][0-9]? 匹配的是 12, 19 整个下来就是  匹配  119,109 或010,或39,或9 这样的
 
        以上的三个 任何一个  {3}匹配三次  就成了  251.213.9.
  
        外加25X  X 为012345, 例如251   或2XY 或 或 0或1 匹配 0次或1次。。。。 $结尾
        就是说 以 252类似结尾的
      
       251.213.39.252
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics