这几天在学习正则

在网上找了点资料

http://www.regexlab.com/zh/regref.htm

找了个PPT  里面写的很细 我改了下 上传附件了    后来加了phpunit测试 是不是逼格瞬间提高了 

 

 

下面是我写的例子  文件也放附件了 

<?php

 

/**

 *

 * 正则

 * @author liss cuzn

 * @version 2015-08-13 10:56:46Z cuzn $

 */

 

/**

 * int preg_match (

 * string $pattern ,

 * qstring $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]]

 * )

 * pattern

 * 要搜索的模式,字符串类型。

 *

 * subject

 * 输入字符串。

 *

 * matches

 * 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本,

 * $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

 *

 * flags

 * flags可以被设置为以下标记值:

 *

 * PREG_OFFSET_CAPTURE

 * 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。

 * 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,

 * 第1个元素是该匹配字符串 在目标字符串subject中的偏移量。

 * offset

 * 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。

 */

function yanzhen ( $reg , $str , $cuzn = 0 ) {

if ( preg_match ( $reg , $str ) ) {

echo "匹配\n";

} else {

echo "不匹配\n";

}

if ( $cuzn == 1 ) {

echo "=================================================\n";

}

}

 

// 验证^

$a = "hi";

$b = "hmi";

$c = "hidden";

$reg = "/^hi/";

 

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证$

$reg = "/hi$/";

$a = "hi";

$b = "chi";

$c = "Orochi1";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证[]

$reg = "/^[a-z]at$/";

$a = "cat";

$b = "mat";

$c = "1at";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证加号

 

$reg = "/^go+gle$/";

$a = "gogle";

$b = "google";

$c = "go1gle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证重复加号

$reg = "/^g[aeiou]+gle$/";

$a = "gogle";

$b = "gzgle";

$c = "gae1gle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证星号

 

$reg = "/^go*gle$/";

$a = "gogle";

$b = "google";

$c = "gooogle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证重复 符号 {x,y}

 

$reg = "/^go{2,4}gle$/";

$a = "gogle";

$b = "google";

$c = "gooooooogle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证重复 符号 {x,}

 

$reg = "/^go{2,}gle$/";

$a = "gogle";

$b = "google";

$c = "gooooooogle";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证 子表达式()

$reg = "/^(very)*cuzn$/";

$a = "very";

$b = "vvvvcuzn";

$c = "veryverycuzn";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证 分支 |

$reg = "/^cuzn$|^org$|^net$/";

$a = "cn";

$b = "cuzn";

$c = "cuznnet";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b );

// yanzhen ( $reg , $c , 1 );

 

// 验证 分支 \

$reg = "/^1\*\(2\+3\)=6$/";

$a = "1*(2+3)=6";

// yanzhen ( $reg , $a , 1 );

 

/**

 * 匹配带区号和横杠的 电话号码

 * 思路:

 * 区号一般都是0xx/x-xxxxxxx/x 前3或者4位-后7位或者8位

 * 第一步 写前3/4位的正则  

 * 0[1-9][0-9]{1,2}

 * 第二步 写后7/8位正则

 * \d{7,8}

 * 连起来就是 /^0[1-9][0-9]{1,2}-\d{7,8}$/

 */

$reg = " /^0[1-9][0-9]{1,2}-\d{7,8}$/";

$a = "13617291145";

$b = "010-51651133";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b , 1 );

 

 

/**

 * 匹配第一位可能是0的手机号码  

 * 思路 其实就是匹配手机 只是前面可能加一个0

 * 手机号码 前2位是   13 15 18 17

 * 那么  0?1[3|5|7|8]\d{9}

 */

 

$reg = "/^0?1[3|5|7|8]\d{9}$/";

$a = "13617291145";

$b = "010-51651133";

// yanzhen ( $reg , $a );

// yanzhen ( $reg , $b , 1 );

 

 

/**

 * 

 * 在线测试 PHPhttp://www.mcqyy.com/RunCode/php5.6/

 * 

 * 匹配IP  

 * 思路  

 * ip就是  0-255 的 4个数 中间加3个.

 * 如果第一位是0 第二位是1-9  第三位是0-9

 * 如果第一位是1 第二位,第三位是0-9

 * 如果第一位是2 第二位,第三位是0-5 

 * 

 * 然后 一个IP地址的最后一个数 必须有值 比如  1.1.1.0   

 * 

 * 步骤 先写一个0-255的 数字

 * ^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2})))(\.))$

 * 然后就是加.循环

 * ^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2})))(\.)){3}((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2}))))$

 */

// $reg = "/^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2}))))$/";

// for($i=0;$i<=255;$i++){

// echo "当前数字是 $i";

// yanzhen ( $reg , $i );

// }

 

/*

$a1=0;

$a2=0;

$a3=0;

$a4=0;

$reg = "/^((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2})))(\.)){3}((\d|([[1-9][0-9])|(1\d{0,2})|((2[0-4]\d)|(2[0-5]{0,2}))))$/";

for($i=0;$i<=255;$i++){

$a1=$i;

for($j=0;$j<=255;$j++){

$a2=$j;

for($m=0;$m<=255;$m++){

$a3=$m;

for($n=0;$n<=255;$n++){

$a4=$n;

$str = $a1.".".$a2.".".$a3.".".$a4;

echo "当前数字是 $str     ";

yanzhen ( $reg , $str ); 

}

}

}

}

*/

 

/**

 * 匹配 日期(1-31号)

 * 这里不考虑闰月,大小月等情况

 * 

 * 思路 

 * 如果第一位是0 第二位可以是任何1-9的数字

 * 如果第一位是1,2 第二位可以是任何0-9的数字

 * 如果第一位是3 第二位只能是0,1

 * 

 * ^(0[1-9])|([1-2]\d)|(3[0-1])$

 */

 

 

$reg = "/^(0[1-9])|([1-2]\d)|(3[0-1])$/";

// $a = "00";

// yanzhen ( $reg , $a );

// $a = "01";

// yanzhen ( $reg , $a );

// $a = "10";

// yanzhen ( $reg , $a );

// $a = "11";

// yanzhen ( $reg , $a );

// $a = "20";

// yanzhen ( $reg , $a );

// $a = "21";

// yanzhen ( $reg , $a );

// $a = "30";

// yanzhen ( $reg , $a );

// $a = "31";

// yanzhen ( $reg , $a );

// $a = "32";

// yanzhen ( $reg , $a , 1 );

 

 

 

 

/**

 * 匹配phper(.+)

 */

$reg = "/^phper(.+)$/";

$a = "phper001,phper002,phper003";

yanzhen ( $reg , $a , 1 );

 

 

 

 

 

         $regex = '/<div class="basic-info">((.|\n)*)<table border=/Ui';

        $url = 'http://3g.ganji.com/qingdao_ershouche/2092038554x?wapadprurl=adurl';

        

        $info=file_get_contents($url);

        preg_match($regex,$info,$m);

        

        $str = trim(str_replace("基本信息","",str_replace("</p>","",str_replace("<p>","",$m[1]))));

        $arr = explode("-",$str);

        var_dump($arr);

 

 

 

 

 

 

 

 

 

 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权