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程序设计>> 中国电力出版社 亏了这本书要不我不可能做到总结的。

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

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航