欢迎来 起落博客 加入收藏 设为主页

正则表达式的基本用法



大家都知道, 正则表达式在处理字串方面, 大大的方便了许许多多的PHP程式设计师.
但对于想学正则表达式的初学者而言, 多多少少有一些问题, 我想以下的解释或多或少都会有所帮助吧 :)通常上, 正则表达式会用到以下的几个”符号”:
^ – 代表字串前面一定要有这样的字, 如^http://, 代表前面一定要有http://
$ – 代表字串后面一定要有这样的字.
? (一个问号) – 它代表一个或没有字元
* (一个*) – 它代表没有或者更多前面的字元
. (一个句点) – 它代表任何一个字元
+ (一个加) – 它代表至少一个或更多前面的字元
[xyz] – 它代表任何一个字元, 或x, 或y, 或z
[a-z] – 它代表任何一个字元, 由a至z
[[:alnum:]] – 代表由a至z, 0至9
[[:digit:]] – 代表由0至9当使用正则表达式时, 必需注意ereg及eregi可大大不同喔~
ereg是非常敏感的 (意即大小字母都分得非常清楚), 而eregi则不是 (只要记着i代表case-insensitive就可以了)

这里举一些例子:

$regexp = eregi(“a?c”, “abc”); //– 这是对的, 因?可以代表”一个”或没有字元
$regexp = eregi(“a?c”, “ac”); //– 这也是对的, 因?可以代表一个或”没有”字元
$regexp = eregi(“a?c”, “a”); //– 这样就不对了, 纵使有a, 可是还是要有c

$regexp = eregi(“[abc]”, “a”); //– 这是对的, 因a是大括号里的其中一个字元
$regexp = eregi(“[a-z]”, “c”); //– 这是对的, 因c包括在a至z里
$regexp = eregi(“[a-z]”, “0”); //– 这是不对的, 因0并不包括在a至z里面

$regexp = eregi(“a.c”, “abc”); //– 这是对的, 因一个.代表”任何”一个字
$regexp = eregi(“a.c”, “ac”); //– 这可就不对了, 因.代表”一个”字元, 所以放abbc也是不对的

$regexp = eregi(“a+c”, “aaaac”); //– 这是对的, 因+代表一人或”更多”前面的字元
$regexp = eregi(“a+c”, “abbc”); //– 这样是不对的, +代表一个或更多”前面的字元”, 而不是代表任何一个字元
$regexp = eregi(“a+c”, “abc”); //– 这样也是不对的, 注释如上

$regexp = eregi(“[^abc]”, “a”); //– 这是比较不同的一点, 那就是如果^出现在[]里面, 代表”除”了里面的字, 全部都是对的.
$regexp = eregi(“[^abc]”, “d”); //– 这是对的, 因d并不在abc里面
$regexp = eregi(“[^[:alnum:]]”, “9”); //–这是对的, 因~并不包括在a至z, 0至9里面
当然, [[:digit:]]用法也是相同:
$regexp = eregi(“[^[:digit:]]”, “a”); //– 这是对的, 因a并不包括在0至9里面

最后, 举个有用的例子,
比如说, 我要每个人的密码都不准拥有0至9, 可以这样试验:
$regexp = eregi(“^[^0-9]+$”, “aaa9”); //–把aaa9当做密码
if ($regexp == “”) {
echo “密码拥有号码, 请改过”;
} else {
echo “密码没有号码, 通过”;
}

测验显示, 密码拥有号码, 请改过.
相信每个人都看到, [^0-9]前后各有^及$, 这是为了确保前后不能拥有号码, 而+则确保中间没有任何的号码,
[]里面的^, 则是”除了0至9之外, 其他一律通过”
所以只要将9拿去, 就会显示”密码没有号码, 通过”了 !
—————————————————————————————–

正则表达式基本用法
1、“.”为通配符,表示任何一个字符,例如:“a.c”可以匹配“anc”、“abc”、“acc”;

2、“[]”,在[]内可以指定要求匹配的字符,例如:“a[nbc]c”可以匹配“anc”、“abc”、“acc”

;但不可以匹配“ancc”,a到z可以写成[a-z],0到9可以写成[0-9];

3、数量限定符号,表示匹配次数(或者叫做长度)的符号:

包括:“*”——0次或者多次

“+”——1次或者多次

“?”——0次或者1次

“{n}”——匹配n次,n为整数

“{n,m}”——匹配从n到m之间的某个数的次数;n和m都是整数;

“{n,}”——匹配n到无穷次之间任意次数;

“{,m}”——匹配0到m之间任意次数;

他们放到匹配格式的后面:

例如:

电话号码:024-84820482,02484820482(假设前面3或者4位,后面7或者8位,并且中间的减号可有可无)

都是符合规定的,那么可以用如下格式来匹配:[0-9]{3,4} \\-? [0-9]{7,8};

注意:“\\”为转义字符,因为“-”在正则表达式用有代表一个范围的意义,例如:前面所说的[0-9],

所以它需要转义字符“\\”进行转义才可使用;

4、“^”为否符号,表示不想匹配的符号,例如:[^z][a-z]+可以匹配所有除“z”开头的以外的所有字

符串(长度大于2,因为“+”表示大于等于1的次数,从第二位开始都是小写英文字符);

如果^放到[]的外边则表示以[]开头的字符串;^[az][a-z]+表示a或者z开头的长度大于等于2的英文字符

串;

5、“|”或运算符,例如:a[n|bc|cb]c可以匹配“abcc”,“anc”,“acbc”;

6、“$”以它前面的字符结尾的;例如:ab+$就可以被“abb”,“ab”匹配;

7、一些简单表示方法:

\\d表示[0-9];\\D表示[^0-9];\\w表示[A-Z0-9];\\W表示[^A-Z0-9];\\s表示[\\t\\n\\r\\f],就是空格字符包括tab

,空格等等;\\S表示[^\\t\\n\\r\\f],就是非空格字符;

8、常用的匹配:

匹配中文字符: “[\\u4e00-\\u9fa5]”;

匹配双字节字符(包括汉字在内):“[^\\x00-\\xff]”;

匹配空行的正则表达式:“\\n[\\s| ]*\\r”;

匹配HTML标记的正则表达式:“/.*|/”;

匹配首尾空格的正则表达式:“(^\\s*)|(\\s*$)”;

匹配非负整数(正整数 + 0):“^\\d+$”;

匹配正整数:“^[0-9]*[1-9][0-9]*$”;

匹配非正整数(负整数 + 0):“^((-\\d+)|(0+))$”;

匹配负整数:“^-[0-9]*[1-9][0-9]*$”;

匹配整数:“^-?\\d+$”;

匹配非负浮点数(正浮点数 + 0):“^\\d+(\\.\\d+)?$”

匹配正浮点数:“^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*

))$”;

^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)

^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配

负浮点数

匹配浮点数:“^(-?\\d+)(\\.\\d+)?$”;

匹配由数字、26个英文字母或者下划线组成的字符串:“^\\w+$”;

匹配email地址:“^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$”;

匹配url:“^[a-zA-z]+://匹配(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$”


原创文章,转载请注明:起落SEO博客
本文链接地址: http://76tui.net/archives/26.html

One comment

  1. 不错哦 支持一个。

    [回复]

    男科医院 said on: 14/02/2012 14:57 | Windows XP | 360浏览器 SE

发表评论

Your email is never published nor shared. Required fields are marked *

*

*

=8966*

输入您的评论:


评论