最经典的正则表达式教程之--PHP正则表达式
php中正则表达式中的特殊符号

php中正则表达式中的特殊符号字符/意义:对于字符,通常表⽰按字⾯意义,指出接着的字符为特殊字符,不作解释。
例如:/b/匹配字符'b',通过在b 前⾯加⼀个反斜杠,也就是/b/,则该字符变成特殊字符,表⽰匹配⼀个单词的分界线。
或者:对于⼏个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,⽽应该按字⾯解释。
例如:*是⼀个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。
为了匹配字⾯上的*,在a前⾯加⼀个反斜杠;例如:/a*/匹配'a*'。
字符^意义:表⽰匹配的字符必须在最前边。
例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前⾯的'A'。
字符$意义:与^类似,匹配最末的字符。
例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。
字符*意义:匹配*前⾯的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"Agoat grunted"中的任何字符。
字符+意义:匹配+号前⾯的字符1次或n次。
等价于{1,}。
例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。
字符?意义:匹配?前⾯的字符0次或1次。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
字符.意义:(⼩数点)匹配除换⾏符外的所有单个的字符。
1到99正则表达式

1到99正则表达式摘要:1.正则表达式的概念与用途2.1到99的数字正则表达式3.数字范围的正则表达式写法4.应用场景及示例正文:正则表达式(Regular Expression),又称规则表达式、常规表达式,是一种用于匹配字符串模式的文本字符串。
它通过一系列特殊的字符和元字符,描述字符串中可能出现的模式,广泛应用于文本搜索与匹配、数据分析等领域。
在正则表达式中,如何表示1到99的数字范围呢?我们可以通过以下正则表达式实现:```^(?:[1-9]|[1-9][0-9])$```这个正则表达式的含义如下:- `^`:表示字符串的开始位置- `(?:...)`:表示一个非捕获组,用于匹配括号内的内容,但不捕获匹配的文本- `[1-9]`:表示匹配0到9之间的任意一个数字- `|`:表示或,用于连接两个或多个正则表达式- `[1-9][0-9]`:表示匹配10到99之间的任意一个两位数- `$`:表示字符串的结束位置这个正则表达式既可以匹配1到9的单个数字,也可以匹配10到99的两位数,范围覆盖了1到99的所有整数。
以下是一个使用Python的示例:```pythonimport retext = "123 456 789 10 20 30 40 50 60 70 80 90"pattern = pile(r"^(?:[1-9]|[1-9][0-9])$")result = pattern.findall(text)print(result) # 输出:["123", "456", "789", "10", "20", "30", "40", "50", "60", "70", "80", "90"]```在这个示例中,我们首先导入了Python的`re`模块,然后定义了一个包含1到99数字的文本。
正则表达式150种表达方式

正则表达式150种表达方式1、删除所有数字。
只要查找:\d就OK。
为了不留空行:替换处:\d2、删除所有英文字母。
只要查找:\a就OK。
为了不留空行:替换处:\d3、删除除换行符以外的所有。
只要查找:. 为了不留空行:替换处:\d4、既删除英文字母又删除数字。
只要查找:\w。
为了不留空行:替换处:\d5、删除数字加字母加等于(如:3a=或3zz=)只要查找:\d+\a+\=。
为了不留空行:替换处:\d6、删除换行。
只要查找:$。
替换处:\d(还原查找:\a+=\f。
替换:\0\n)。
如在换行后加一空格,查找:(\a)$。
替换:\0 \d。
7、删除空行只要查找:^$。
为了不留空行:替换处:\d8、删除首尾空格。
只要查找:^\s*|\s*$就OK9、删除行前数字及顿号。
只要查找:\d+、替换为空10、删除末尾标点符号。
只要查找:\P+$|\P+\s+$,“|”前面是没有空格的,“|”后面有空格,P后的加是为了……而用的。
11、删除末尾空格。
只要查找:\s+$。
替换为空。
12、删除第一个字如:“的我们”中的“的”只要查找:^\的。
13、删除第几个字。
查找:查找:^().(.+)。
替换:\1\2。
去掉前面的拼音:查找:^\a+替换为空。
第一个括号里可加“.”且可变。
14、删含的。
查:.*的.*替:\d。
的头查:.*=的.*替:\d。
的尾查:\a.*\c.*的$替:\d(留它不匹配)●删非的行查:^[^的]+$替:\d15、删除几码以上的码查:^(...)...替:\1。
删第几位码。
查:^(...).(.+)替:\1\2(变成\1,\2则其位则改成,了)首括号的.可变。
16、删除各类型的几字词,但必须是码前词后或纯词。
三字词:查找:^\~f{}\f{3}$替换:\d。
替换:\d “3”可以改。
17、删除11字词及其以上的词条查找(自定义格式):\a{}\=(\c|\P|\p){11,}。
替换:\d。
11可改。
正则表达式-语法大全

正则表达式-语法⼤全1. 正则表达式规则1.1 普通字符字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。
表达式中的普通字符,在匹配⼀个字符串的时候,匹配与之相同的⼀个字符。
,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。
(注:下标从0开始还是从1开始,因当前编程语⾔的不同⽽可能不同),匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。
1.2 简单的转义字符⼀些不便书写的字符,采⽤在前⾯加 "/" 的⽅法。
这些字符其实我们都已经熟知了。
表达式可匹配/r, /n代表回车和换⾏符/t制表符//代表 "/" 本⾝还有其他⼀些在后边章节中有特殊⽤处的标点符号,在前⾯加 "/" 后,就代表该符号本⾝。
⽐如:^, $ 都有特殊意义,如果要想匹配字符串中 "^" 和 "$" 字符,则表达式就需要写成 "/^" 和 "/$"。
表达式可匹配/^匹配 ^ 符号本⾝/$匹配 $ 符号本⾝/.匹配⼩数点(.)本⾝这些转义字符的匹配⽅法与 "普通字符" 是类似的。
也是匹配与之相同的⼀个字符。
,匹配结果是:成功;匹配到的内容是:"$d";匹配到的位置是:开始于3,结束于5。
1.3 能够与 '多种字符' 匹配的表达式正则表达式中的⼀些表⽰⽅法,可以匹配 '多种字符' 其中的任意⼀个字符。
⽐如,表达式 "/d" 可以匹配任意⼀个数字。
虽然可以匹配其中任意字符,但是只能是⼀个,不是多个。
这就好⽐玩扑克牌时候,⼤⼩王可以代替任意⼀张牌,但是只能代替⼀张牌。
PHP常用正则表达式

PHP常⽤正则表达式PHP代码$str = preg_replace("/(<a.*?>)(.*?)(<\/a>)/", '\1<span class="link">\2</span>\3', $str);其中⽤了三个⼦模式(每个圆括号中内容为⼀个⼦模式),第⼀个是链接开始标签,第⼆个是链接⽂本,第三个是</a>然后第⼆个参数中\1、\2、\3就表⽰这三个部分,要替换成什么样⼦还不简单?获取页⾯中的所有链接地址的PHP函数下⾯这个⽤PHP写的函数,可以获取任意的字符串$string中的所有链接地址($string可以是从⼀个HTML页⾯⽂件直接读取出来的字符串),结果保存在⼀个数组中返回.该函数⾃动把电⼦邮件地址排除在外,⽽且返回的数组中不会有重复元素.function GetAllLink($string){$string = str_replace("\r","",$string);$string = str_replace("\n","",$string);$regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)";$regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)";//去掉标签之间的⽂字$string = eregi_replace(">[^<>]+<","><", $string);//去掉JAVASCRIPT代码$string = eregi_replace("<!--.*//-->","", $string);//去掉⾮<a>的HTML标签$string = eregi_replace("<[^a][^<>]*>","", $string);//去掉EMAIL链接$string = eregi_replace("<a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string);//替换需要的⽹页链接$string = eregi_replace("<a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string);$output[0] = strtok($string, "\t");while(($temp = strtok("\t"))){if($temp && !in_array($temp, $output))$output[++$i] = $temp;}return $output;}以下是以PHP的语法所写的⽰例验证字符串是否只含数字与英⽂,字符串长度并在4~16个字符之间<?php$str = 'a1234';if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {echo "验证成功";} else {echo "验证失敗";}?>简易的台湾⾝分证字号验证<?php$str = 'a1234';if (preg_match("^(?:\d{15}|\d{18})$", $str)) {echo "验证成功";} else {echo "验证失敗";}>匹配中⽂字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中⽂还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1)匹配空⽩⾏的正则表达式:\n\s*\r评注:可以⽤来删除空⽩⾏匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />评注:⽹上流传的版本太糟糕,上⾯这个也仅仅能匹配部分,对于复杂的嵌套标记依旧⽆能为⼒匹配⾸尾空⽩字符的正则表达式:^\s*|\s*$评注:可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*评注:表单验证时很实⽤匹配⽹址URL的正则表达式:[a-zA-z]+://[^\s]*评注:⽹上流传的版本功能很有限,上⾯这个基本可以满⾜需求匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实⽤匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}评注:匹配形式如 0511-******* 或 021-********匹配腾讯QQ号:[1-9][0-9]{4,}评注:腾讯QQ号从10000开始匹配中国邮政编码:[1-9]\d{5}(?!\d)评注:中国邮政编码为6位数字匹配⾝份证:\d{15}|\d{18}评注:中国的⾝份证为15位或18位匹配ip地址:\d+\.\d+\.\d+\.\d+评注:提取ip地址时有⽤匹配特定数字:^[1-9]\d*$ //匹配正整数^-[1-9]\d*$ //匹配负整数^-?[1-9]\d*$ //匹配整数^[1-9]\d*|0$ //匹配⾮负整数(正整数 + 0)^-[1-9]\d*|0$ //匹配⾮正整数(负整数 + 0)^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配⾮负浮点数(正浮点数 + 0)^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配⾮正浮点数(负浮点数 + 0)评注:处理⼤量数据时有⽤,具体应⽤时注意修正匹配特定字符串:^[A-Za-z]+$ //匹配由26个英⽂字母组成的字符串^[A-Z]+$ //匹配由26个英⽂字母的⼤写组成的字符串^[a-z]+$ //匹配由26个英⽂字母的⼩写组成的字符串^[A-Za-z0-9]+$ //匹配由数字和26个英⽂字母组成的字符串^\w+$ //匹配由数字、26个英⽂字母或者下划线组成的字符串下⾯是⼀些特殊字符:正则表达式中的特殊字符:(学习参考书-<<精通正则表达式>>)字符意义:对于字符,通常表⽰按字⾯意义,指出接着的字符为特殊字符,不作解释。
正则表达式入门教程

正则表达式入门教程以下内容经正则表达式学习网授权≈正则表达式是什么?≈在使用电脑进行各种文字处理的时候,我们有时需要查找和匹配一些特殊的字符串,如邮箱地址、验证用户输入的密码是否包含了大小写字母和数字,查找HTML源文档中的所有web地址等等,这时我们就可以使用到正则表达式。
正则表达式本身是一个“字符串”,通过这个“字符串”去描述字符组成规则。
如abbb、abbbb、abbbbb这三个字符串包都是以a字母开头a后面有一个b字母,而且b字母重复了3到5次。
用正则表达式来描述就是ab{3,5},b{3,5}表示b字符重复3到5次。
如果我们想匹配ababab这样的字符串,ab重复了3次,用正则表达式表示就是(ab){3},圆括号()是正则表达式中的分组。
大家如果想亲自感受正则表达式的使用效果,可以打开正则表达式测试系统。
如以上实例所展示的,正则表达式为人们提供了一种简单易用的字符处理工具。
它在目前主流的文字处理软件中都提供了良好的支持(不仅是编程软件,还有文字处理软件Uedit32、EditPlus,网页采集软件火车头等等),它具有很强的通用性,学好它,我们可以达一变应万变的效果。
≈正则表达式详解≈像{},()这种在正则表达式中,具有特殊含义的字符称为元字符(metacharacter)。
元字符是组成正则表达式的基本元素,在正则表达式经常使用的元字符不是很多,概念容易理解。
大家只要花30来分钟学完我们的教程基本上就可以完全掌握。
为了您能更快速的掌握正则表达式,我们为您推荐一款方便的正则表达式在线测试工具“RegExr”,(RegExr由免费提供)。
保留字符匹配字符本身匹配字符数量匹配字符位置分组匹配表达式选项保留字符(返回目录)在正则表达式中,有一些字符在正则表达式中具有特殊含义被称保留字符,如*表示前一个元素可以重复零次或多次,要匹配“*”字符本身使用\*,半角句号.匹配除了换行符外的所有字符,要匹配“.”使用\.。
PHP中的正则表过式

正则表达式整理邹义良邮箱:it9981@微博:/it266论坛:定义:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
使用原则:可以使用字符串函数完成的功能,优先选择函数,复杂的操作,才选用正则表过式。
需要和函数一起使用,才能发挥出正则表达式的作用。
(分割、匹配、查找、替换…)php中提供两套正则表达式函数库:1.POSIX扩展正则表达式函数(ereg_开头)2.Perl兼容正则表达式函数(preg_开头) 推荐学习和使用正则表达式模式如何编写语法:1.定界符号2.原子3.元字符4.模式修正符号测试代码<?php$regex='/[^0-9a-zA-Z]/';$str='1aA#';echo '表达式:<b>'.$regex.'</b> ';echo '字符串:<b>'.$str.'</b> ';if(preg_match($regex,$str)){echo '<font color="green">匹配成功</font>';}else{echo '<font color="red">匹配失败</font>';}?>定界符:起始和结束的符号。
除了字母、数字和反斜线(\)以外的任何字符,都可以为定界符。
// || {} !! ……没有特殊需要,都使用//作为定界符定界符之间,是原子、元字符,字界符外边,是模式修正符。
有的语言中,可以没有定界符原子:是正则表达式的最基本组成单位,必须至少包含一个原子。
只要在正则表达式中,可以单独使用的字符,都是原子。
正则表达式实用语法大全

正则表达式基本符号:^ 表示匹配字符串的开始位置 (例外用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)$ 表示匹配字符串的结束位置* 表示匹配零次到多次+ 表示匹配一次到多次 (至少有一次)表示匹配零次或一次. 表示匹配单个字符| 表示为或者,两项中取一项( ) 小括号表示匹配括号中全部字符[ ] 中括号表示匹配括号中一个字符范围描述如[0-9 a-z A-Z]{ } 大括号用于限定匹配次数如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符{n,m}表示至少n,最多m\ 转义字符如上基本符号匹配都需要转义字符如 \* 表示匹配*号\w 表示英文字母和数字 \W 非字母和数字\d 表示数字 \D 非数字常用的正则表达式匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?sql语句:^(select|drop|delete|create|update|insert).*$1、非负整数:^\d+$2、正整数:^[0-9]*[1-9][0-9]*$3、非正整数:^((-\d+)|(0+))$4、负整数:^-[0-9]*[1-9][0-9]*$5、整数:^-?\d+$6、非负浮点数:^\d+(\.\d+)?$7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$9、负浮点数:^(-((正浮点数正则式)))$10、英文字符串:^[A-Za-z]+$11、英文大写串:^[A-Z]+$12、英文小写串:^[a-z]+$13、英文字符数字串:^[A-Za-z0-9]+$14、英数字加下划线串:^\w+$15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$17、邮政编码:^[1-9]\d{5}$18、中文:^[\u0391-\uFFE5]+$19、电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$20、手机号码:^((\d2,3)|(\d{3}\-))?13\d{9}$21、双字节字符(包括汉字在内):^\x00-\xff22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>24、匹配空行:\n[\s| ]*\r25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *=*('|")?(\w|\\|\/|\.)+('|"| *|>)?26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)29、提取信息中的中国手机号码:(86)*0*13\d{9}30、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}31、提取信息中的中国电话号码(包括移动和固定电话):(\d3,4|\d{3,4}-|\s)?\d{7,14}32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+34、提取信息中的任意数字:(-?\d*)(\.\d+)?35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)36、电话区号:/^0\d{2,3}$/37、腾讯QQ号:^[1-9]*[1-9][0-9]*$38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用正则表达式的原因之一,是在典型的搜索和替换操作 中,只能对确切文字进行匹配,对象动态文本的搜索就有 困难了,甚至是不可能的。
/^-?\d+$|^-?0[xX][\da-fA-F]+$/ /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+){0,3}]$/
'.'
一个点('.')可以代表所有的单一字符,不包括"\n" 如果,要匹配包括"\n"在内的所有单个字符,怎么办? 用'[\n.]'这种模式. "a.[0-9]": 一个a加一个字符再加一个0到9的数字 ".{3}$": 三个任意字符结尾 .
[]
中括号括住的内容只匹配一个单一的字符 "[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样); "[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还 有 "[abcd]"效果一样); 一般我们都用[a-zA-Z]来指 定字符为一个大小写英文 "^[a-zA-Z]": 匹配以大小写字母开头的字符串 "[0-9]%": 匹配含有 形如 x% 的字符串 ",[a-zA-Z0-9]$": 匹配以逗号再加一个数字或字母 结尾的字符串
如果使用一个没有特殊字符的正则表达式,相当于纯文本搜索, 使用strstr( )函数也可达到同样的效果。
正则表达式简介(二)
在PHP中有两套正则表达式函数库,两者功能相似,只是 执行效率略有差异:
一套是由PCRE(Perl Compatible Regular Expression)库提供 的。使用“preg_”为前缀命名的函数; 一套由POSIX(Portable Operation System interface)扩展提供 的。使用以“ereg_”为前缀命名的函数;
^[]和[^ ]的区别
你也可以把你不想要得字符列在中括号里,你只 需要在总括号里面使用'^' 作为开头 "%[^a-zAZ]%" 匹配含有两个百分号里面有一个非字母的字 符串. 要点:^用在中括号开头的时候,就表示排除括号里 的字符 不要忘记在中括号里面的字符是这条规路的例 外—在中括号里面, 所有的特殊字符,包括(''), 都 将失去他们的特殊性质 "[*\+?{}.]"匹配含有这些字 符的字符串.
* + ? . | ^或\A $或\Z \b \B [] [^] () {m} {m,n} {m,}
原子表
原子表”[]”中存放一组原子,彼此地位平等,且仅匹配其 中的一个原子。如果想匹配一个 ”a” 或 ”e” 使用 / [ae]/, 例如: /Pr[ae]y/ 匹配 ”Pray” 或者 ”Prey ”。 原子表 ”^” 或者称为排除原子表,匹配除表内原子外的 任意一个字符。例如:/p[^u]/匹配“part”中的“pa”,但无 法匹配“computer”中的“pu”因为“u”在匹配中被排除。 通常,在原子表中用“-”连接一组按ASCII码顺序排列的 原子,用以简化书写。 如/x[0123456789]可以写成/x[09]/,用来匹配一个由 “x” 字母与一个数字组成的字符串; /0[xX][0-9a-fA-F]/匹配一个简单的十六进制数字,如 “0x9”。/[^0-9a-zA-Z_]/匹配除英文字母、数字和下划线 以外任何一个字符,其等价于/\W/。
从邮件验证说起
先写用户名的正则表达式 ^[a-zA-Z][0-9a-zA-Z_]{4,19} 再写主机名的正则表达式 [0-9a-zAZ_]{1,10}(\.)(com|cn||net)$ 再把前后拼起来则为: ^[a-zA-Z][0-9a-zA-Z_]{4,19}@[0-9a-zAZ_]{1,10}(\.)(com|cn||net)$
正则表达式所使用的普通转义字符
原子 说明 -------------------------------------------------------------------------------------------------------\d 匹配一个数字;等价于[0-9] \D 匹配除数字以外任何一个字符;等价于[^0-9] \w 匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_] \W 匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_] \s 匹配一个空白字符;等价于[\f\n\r\t\v] \S 匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v] \f 匹配一个换页符等价于 \x0c 或 \cL \n 匹配一个换行符;等价于 \x0a 或 \cJ \r 匹配一个回车符等价于\x0d 或 \cM \t 匹配一个制表符;等价于 \x09\或\cl \v 匹配一个垂直制表符;等价于\x0b或\ck \oNN 匹配一个八进制数字 \xNN 匹配一个十六进制数字 \cC 匹配一个控制字符
{ } \b
看了上面的例子,你对{n,m}应该理解了吧.要注意 的是,n和m都不能为负整数,而且n总是小于m. 这 样,才能 最少匹配n次且最多匹配m次. 如"p{1,5}" 将匹配 "pvpppppp"中的前五个p 下面说说以\开头的 \b 书上说他是用来匹配一个单词边界,就是...比如 've\b',可以匹配love里的ve而不匹配very里有ve \B 正好和上面的\b相反.例子我就不举了
^ 和 $
看到前面的邮件验证大部分人可能会感到头痛,别急下面我 们慢慢分解 开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始 和结束,下面法举例说明 "^The": 开头一定要有"The"字符串; "of despair$": 结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上 是只有abc匹配 "notice": 匹配包含notice的字符串 你可以看见如果你没有用 我们提到的两个字符(最后一个例子),就是说 模式(正 则表达式) 可以出现在被检验字符串的任何地方,你没有 把他锁定到两边 (开始或结束)
{}
你也可以在大括号里面限制字符出现的个数,比如 "ah{2}": 要求a后面一定要跟两个h(一个也不能 少)("ahh"); "ah{2,}": 要求a后面一定要有两个或者两个以上 h(如"ahh", "ahhhh", 等.); "ah{3,5}": 要求a后面可以有3-5个h("ahhh", "ahhhh", or "ahhhhh").
应用
[0-9a-zA-Z_]表示从所有的阿拉伯数字和英文及_中取一个 字符,而{4,19}表示匹配最少4次,最多9次显然 [0-9a-zA-Z_]{4,19}表示前面的字符至少出现4次,最多出现 19次. 那么现在请问下面这个表达式所表达的意思 ^[a-zA-Z][0-9a-zA-Z_]{4,19} (\.)表示一个点别和'.'混淆了'.'是表示除\n的任意一个字符() 表示这是个子母式 (com|cn||net)$ 表示以com或cn或或net结尾的一串字符
正则表达式简介(一)
正则表达式是用于描述字符排列模式一种语法规则。它主要用于 字符串的模式分割、匹配、查找及替换操作。到目前为止,我们 前面所用过的精确(文本)匹配也是一种正则表达式。
在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于 通配符)联合构成的一个文本模式的程序性描述。
在程序语言中,通常将模式表达式(即正则表达式)包含在两个 反斜线“/”之间,如“/apple/”。用户只要把需要匹配的模式内容 放入定界之间即可。
一个正则表达式中至少包含一个原子。
原子(Atom)
原子是组成正则表达式的基本单位,在分析正则表达式时, 应作为一个整体。
原子字符是由所有末显式指定为元字符的打印和非打印字 符组成。这包括所有的英文字母、数字、标点符号以及其 他一些符号。原子也包括以下内容。
单个字符、数字,如a~z,A~Z,0~9. 模式单元,如(ABC).可以理解为由多个原子组成的大的原子。 原子表,如[ABC]. 重新使用的模式单元。 普通转义字符。 转义元字符。
'*', '+',和 '?',
接着,说说 '*', '+',和 '?', 他们用来表示一个字符可以出现的次 数或者顺序. 他们分别表示: * 表示出现0次或1次或多次 相当于{0,}, + 表示出现1次或多次 相当于{1,}, ? 表示出现0次或1次 相当于{0,1}, 这里是一些例子: "ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个 b组成的字符串("a", "ab", "abbb", 等); "ab+": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.); "ab?":和ab{0,1}同义,可以没有或者只有一个b; "a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的 字符串. 要点, '*', '+',和 '?'只管它前面那个字符.