分享
 
 
 

PHP 的 POSIX 正则表达式实例讲解(上)

王朝php·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

PHP代码:

<?php

// Title : PHP 的 POSIX 正则表达式实例讲解(上)

// Author : Stangly.Wrong

// Last modify : 2004.11.1

// Description : 正表达式作为一种强劲的字符串处理方法,深爱很多的编程爱好者

// 所喜爱,但是由于正则表达式的语法相对来说比较难以理解,所以

// 是初学者的一大难题。因此,本人在此简单的说一下自己学习正则

// 表达式的一些经验和方法,希望能够给各位兄弟朋友一点帮助。

// 本文大部分参照了<<PHP程序设计>>一书,本书对于我帮助很大。

// WebSite : 前几天刚申请了 http://blog.csdn.net/stangly,用了两天也知道

// 了什么叫BLOG了。

// Function myEreg($p, $s, $preg)

// 可以通过对 $preg 设置决定是否采用 POSIX 还是 兼容perl 的正则匹配

// 本文所采用的ereg()函数对大小定敏感 如果不想去区分大小写,

// 则可以使用 eregi() 函数去替代 ereg() 函数

// 如果匹配成功,则输出 Result is : True

// 否则输出 Result is : False

$title_prefix = '例 ';

$call_num = 1;

$title_suffix = '<br />';

function myEreg( $p, $s, $preg = FALSE )

{

global $call_num, $title_prefix, $title_suffix;

echo $title_prefix.$call_num.$title_suffix;

$call_num++;

$function_name = ( $preg ) ? 'preg_match' : 'ereg' ;

echo "\$p = \"$p\" <br />";

echo "\$s = \"$s\" <br />";

echo "Call function is : $function_name(\$p, \$s) <br />";

if ( $function_name($p, $s) )

echo "Result is : True <br /><br />\r\n";

else

echo "Result is : False <br /><br />\r\n";

return True;

}

// -----------------------------------------------------------------

// 学习开始 --------------------------------------------------------

// -----------------------------------------------------------------

// 最简单的一种匹配模式

// 从 $s 中寻找 $p 字符串

// 例 1 匹配失败 $p 出现在 $s 中

$p = 'jear';

$s = 'I love jear forevery!';

myEreg($p, $s);

// -----------------------------------------------------------------

// 匹配特殊字符 比如 $ . ^ 等,属于正则表达式的相关字符

// 使用 对这些字符进行转义

// 例 2 本例匹配将成功,如果剔除 将失败

$p = '\$100';

$s = 'I want lend jear $100.';

myEreg($p, $s);

// 此处将直接使用 $ 去匹配

// 例 3 匹配失败

$p = '$100';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 ^ 匹配

// ^ 指出必须与字符串的开头字符串匹配

// 例 4 本例匹配失败 $p 虽然出现在 $s 中,但不是在开头位置

$p = '^jear';

myEreg($p, $s);

// 例 5 本例匹配成功,$p 在 $s 的开头位置

$s = 'jear is my good friend !';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 $ 匹配

// $ 指出必须表示它必须与字符串的末尾字符串匹配

// 例 6 本例匹配失败 $p 不是在 $s 的尾部出现

$p = 'jear$';

myEreg($p, $s);

// 例 7 本例匹配成功,$p 在 $s 的尾部出现

$s = 'I love jear';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 . 匹配

// . 可以匹配任意单个字符

// 例 8 本例匹配成功

$p = 'je.r';

$s = 'jear';

myEreg($p, $s);

// 例 9 匹配失败

$s = 'jer';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 [] 预定义一个类进行匹配

// 仔细观察 $s 的书写,与 $p 比较

// 例 10 匹配成功

$p = 'j[eE]ar';

$s = 'I love jear.';

myEreg($p, $s);

// 例 11 匹配成功

$s = 'I love jEar';

myEreg($p, $s);

//例 12 匹配失败 因为 jaar 不符合 $p 所定义的一个类串

$s = 'I love jaar.';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 [^] 去排除一个预定义的类

// 例 13 匹配成功

// 在进行匹配时,$p 规定了 在 j 字母后只要不出现 abcd ,同时尾部是以

// ar 结束的,即匹配成功

$p = 'j[^abcd]ar';

$s = 'I love jear just love my self !';

myEreg($p, $s);

// 例 14 匹配失败

$s = 'I love jaar !';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 - 方式去在 [] 类中 定义一个范围

// 例 15 匹配成功 因为 预定义类指出字符范围为 0 到 6,而 3th 的 th 前

// 数字 3 处在这一类范围内

$p = '[0-6]th';

$s = 'This is the 3th month that i gets along with jear!';

myEreg($p, $s);

// 例 16 匹配失败 自己分析一下原因

$s = 'This is the 9th month that i gets along with jear!';

myEreg($p, $s);

// 例 17 匹配成功 使用 ^ 类似于取反运算

$p = '[^0-6]';

myEreg($p, $s);

// 例 18 匹配成功

$p = 'je[a-z]r';

$s = 'I love jear!';

myEreg($p, $s);

// 例 19 匹配成功 解决大小写匹配

$p = 'je[a-zA-Z]r';

$s = 'I love jeAr !'; // or $s = 'I love jear !';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 | 做选择性匹配

// | 可以去做一个选择性的匹配.

// 例 20 匹配成功

$p = 'jear|cxj|cat';

$s = 'I love jear !';

myEreg($p, $s);

// 例 21 匹配成功

$s = 'I love cxj !';

myEreg($p, $s);

// 例 22 匹配成功 组合 [] - 方式去匹配

$p = '^([[a-zA-Z]ear)';

$s = 'Jear is my good friend !';

myEreg($p, $s);

// 例 23 匹配成功

$s = '0ear is my good firend !';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 + 号去匹配重复字符,重复次最少是一次

// 例 24 匹配成功 Be+p 指定对于e字符可以最少重复一次,最多重复次不限

$p = 'Be+p';

$s = 'Beep';

myEreg($p, $s);

// 例 25 匹配成功

$s = 'Beeeep';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 ? 号去匹配重复字符, 与 + 号类似,但不规定重复最少次数,

// 规定了最多只能重复一次

// 例 26 匹配成功

$p = 'Be?p';

$s = 'Bp';

myEreg($p, $s);

// 例 27 匹配失败 因为 e 出现了两次

$p = 'Be?p';

$s = 'Beep';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 * 号匹配重复字符, 与 + 号类似, 没有规定最少重复次数

// 例 28 匹配成功

$p = 'Be*p';

$s = 'Beep';

myEreg($p, $s);

// 例 29 匹配成功

$p = 'Be*p';

$s = 'Bp';

myEreg($p, $s);

// 例 30 匹配成功

$p = 'Be*p';

$s = 'Beeeeeeeeeep';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 {n} 号规定出现的具体次数

// 例 31 匹配成功 规定 e 字符必须出现两次

$p = 'Be{2}p';

$s = 'Beep';

myEreg($p, $s);

// 例 32 匹配失败

$s = 'Beeep';

myEreg($p, $s);

// 例 33 匹配失败

$s = 'Bep';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 {n,m} 号规定出现的最少和最大次数

// 例 34 匹配成功 规定 e 字符可以不出现在 $s 里, 但最多可以出现 2 次

$p = 'Be{0,2}p';

$s = 'Beep';

myEreg($p, $s);

// 例 35 匹配成功

$s = 'Bp';

myEreg($p, $s);

// 例 36 匹配失败 e 出现次数为3 次,超过规定的2 次限定

$s = 'Beeep';

myEreg($p, $s);

// -----------------------------------------------------------------

// 使用 {n,} 号规定出现的最少次数,但不规定最多次数

// 例 37 匹配成功

$p = 'Be{1,}p';

$s = 'Bep';

myEreg($p, $s);

// 例 38 匹配成功

$p = 'Be{1,}p';

$s = 'Beeeeeep';

myEreg($p, $s);

// 例 39 匹配失败 e 没有在 $s 中出现,而规定必须要出现 1 次

$p = 'Be{1,}p';

$s = 'Bp';

myEreg($p, $s);

// ----------------------------------------------------------------

// () 的使用 联系以下实例 将多个正则联系起来,作为一个单独个体对待

// 例 41 匹配成功

$p = '^(good|best)';

$s = 'good';

myEreg($p, $s);

// 例 42 匹配成功

$s = 'best';

myEreg($p, $s);

// ----------------------------------------------------------------

// 更多的示例

// ----------------------------------------------------------------

// 例 43 匹配日期示例 0000-00-00 到 9999-99-99 没有规定检查日期的合法性

$p = '[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}';

$s = '2004-12-1';

myEreg($p, $s);

// 原先想更多的示例 ,现在手实也酸得慌, 没办法,晚上还要去讲课。

// 今天就到这个地方吧。 这几天有空的话,会再写出下半部分。去做

// 正则表达式的其它的几个用法和与perl兼容的一些函数使用。

// 参考文章:<<php程序设计>> 中国电力出版社 亏了这本书要不我不可能做到总结的。

// 网上众多兄弟的好文章 不一一列举

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有