欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正则 &preg_match

程序员文章站 2022-06-06 17:14:27
...
<?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