PHP正则表达式二徐枭雄课堂笔记

合集下载

php最完整正则表达式,后附小结最常用正则表达式

php最完整正则表达式,后附小结最常用正则表达式

采集一个网页上的电子邮件
比如,我们想要采集一个网页上的电子邮件,那么,什么样的数据才算是一个合法的电子邮件呢?我可以这样输入:youname@,当然我也会这样输入:xxx@,但是这样的输入就是非法的:xxx@@或者@,等等,所以我们得出一个合法的电子邮件地址至少应当满足以下几个条件:
我的回答是:
^[a-zA-Z]$|^\d+$
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\d+$" //整数
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ //匹配email地址
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ //匹配url
今天有网友问:如何用正则表达式表示要么是数字要么是字母 是字母的话只能是一个字母 数字则无所谓?
[xyz] :一个字符集。与括号中字符的其中之一匹配。例如,"[abc]" 匹配"plain"中的"a"。
[^xyz] :一个否定的字符集。匹配不在此括号中的任何字符。例如,"[^abc]" 可以匹配"plain"中的"p".

php中正则表达式详解

php中正则表达式详解

php中正则表达式详解概述正则表达式是⼀种描述字符串结果的语法规则,是⼀个特定的格式化模式,可以匹配、替换、截取匹配的字符串。

常⽤的语⾔基本上都有正则表达式,如JavaScript、java等。

其实,只有了解⼀种语⾔的正则使⽤,其他语⾔的正则使⽤起来,就相对简单些。

⽂本主要围绕解决下⾯问题展开。

有哪些常⽤的转义字符什么是限定符与定位符什么是单词定位符特殊字符有哪些什么是逆向引⽤以及怎样使⽤逆向引⽤匹配模式php中怎样使⽤正则表达式php中哪些⽅⾯需要⽤到正则怎样进⾏邮箱匹配,url匹配,⼿机匹配怎样使⽤正则替换字符串中某些字符贪婪匹配与惰性匹配区别正则表达式之回溯与固态分组正则优缺点有哪些正则表达式的基本知识汇总⾏定位符(^与$)⾏定位符是⽤来描述字符串的边界。

“$”表⽰⾏结尾“^”表⽰⾏开始如"^de",表⽰以de开头的字符串"de$",表⽰以de结尾的字符串。

单词定界符我们在查找的⼀个单词的时候,如an是否在⼀个字符串”gril and body”中存在,很明显如果匹配的话,an肯定是可以匹配字符串“gril and body”匹配到,怎样才能让其匹配单词,⽽不是单词的⼀部分呢?这时候,我们可以是哟个单词定界符\b。

\ban\b 去匹配”gril and body”的话,就会提⽰匹配不到。

当然还有⼀个⼤写的\B,它的意思,和\b正好相反,它匹配的字符串不能使⼀个完整的单词,⽽是其他单词或字符串中的⼀部分。

如\Ban\B。

选择字符(|) ,表⽰或选择字符表⽰或的意思。

如Aa|aA,表⽰Aa或者是aA的意思。

注意使⽤”[]”与”|”的区别,在于”[]”只能匹配单个字符,⽽”|”可以匹配任意长度的字符串。

在使⽤”[]”的时候,往往配合连接字符”-“⼀起使⽤,如[a-d],代表a或b或c或d。

排除字符,排除操作正则表达式提供了”^”来表⽰排除不符合的字符,^⼀般放在[]中。

PHP常用正则

PHP常用正则
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
(1)应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
只能输入非零的负整数:“^-[1-9][0-9]*$”
只能输入长度为3的字符:“^.{3}$”
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,
“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”

PHP知识点(3)-正则

PHP知识点(3)-正则

PHP知识点(3)-正则组成:定界符//原⼦元字符模式修正符⼀、原⼦每个模式中⾄少要包含⼀个原⼦普通的原⼦:0-9 a-z A-Z⼀些特殊符号和元字符作为原⼦:需要转义,如. * + ?等⼀些⾮打印字符:\n \f \r \t \v \cx通⽤字符类型:\d \D \s \S \w \W⾃字义原⼦表:[],从原⼦表中只能选择⼀个原⼦进⾏匹配⼆、元字符*+.|{n}{n,}{n,m}^或\A$或\Z\b单词的边界\B⾮单词边界[][^]()注意点:1、“.”通常可以使⽤“.*?”或“.+?”组合来匹配除换⾏符以外的任何字符串,取消贪婪模式2、后向引⽤,使⽤原字符()标记的开始和结束,存储匹配的缓冲区编号从1开始,连续编号直⾄99。

每个缓冲区都可以使⽤\n来访问,其中n 为⼀个标识特定缓冲区的⼀位或两位⼗进制数。

如\1,\2,\3等形式,在正则中使⽤还需要加上\转义,例如:\\1,\\2。

当需要使⽤模式单元,⽽⼜不想存储匹配结果时,可以使⽤⾮捕获元字符,“?:”,"?=","?!",来忽略对匹配结果的保存。

三、模式修正符i:不区分⼤⼩写m:将字符串视为多⾏s:如果加上此字符,模式中的原点”.“匹配所有字符,包括换⾏符\fx:模式中的空⽩忽略不计,除⾮它已经被转义e:只⽤在preg_replace 中,该函数在逆向引⽤做正常替换,将其作为PHP代码求值,并⽤其结果来替换所搜索的字符串,见细说PHP第307页例。

U:不要和.*?⼀起使⽤,否则会再次启⽤贪婪模式D:加上此修饰符后,模式中的$仅匹配结尾,如果加上m多⾏模式,则忽略此选项。

与Perl兼容的正则函数字符串的匹配与查找:1、int preg_match(pattern,subject[ ,array matchs])按指定的正则表达式,对字符串进⾏搜索和匹配⼀次,第⼀个参数是正则,第⼆个参数是字符串,第三个参数是匹配的结果放到这个数组中,最终返回结果是0或12、int preg_match_all(pattern,subject,array matchs[ ,int flags]),按照指定的正则匹配到字符串的末尾,可以获得所有的匹配结果,前三个参数同上,第四个参数有以下两个值:PREG_PATTERN_ORDER:默认,对结果排序使⽤$matchs[0]为全部模式匹配的数组,$matchs[1]为第⼀个括号中的⼦模式所匹配的字符串组成的数组。

php正则表达式函数使用2

php正则表达式函数使用2
PREG_SPLIT_NO_EMPTY preg_split()只能返回非空的成分。
PREG_SPLIT_DELIM_CAPTURE 定界符模式中得括号表达式也会被捕捉返回。
PREG_SPLIT_OFFSET_CAPTURE对每个出现的匹配结果也同时返回其附属的字符串偏移量。
字符串处理函数
preg_replace_callback()
preg_prelace(模式,字符串,替换字符串,可选参数替换次数)字符串查找替换,此函数有一个专门为他提供的修正模式“e”,也只有preg_replace()函数使用此修正符,如果设置此修正符,函数在替换字符串的时间将对字符串中逆向引用做正常的替换,将其作为php代码求值。并用做其结果来替换所搜索的字符串。要确保第二个参数构成一个合法的php代码字符串,否则报告中包含preg_replace()的行中出现的语法解析错误。
preg_split()字符串分割,本函数返回第一个字符串数组,数组元素包含通过第二个参数subject中得字符串,井底个参数的正则表达式pattern,作为匹配费边界分隔的字符串,如果第三个参数limit,则最多返回limit个字符串。而其最后一个元素包含了subject中剩余的所有部分。乳沟limit为-1,则意味着没有限制。还可以用来继续只等第四个可选参数flags,其中flags可以是下了标记的任意组合。
preg_match_all()
此函数与perg_match函数相似不同的是perg_match函数在第一次匹配之后就会停止搜索,而parg_match_all则不会,他会一直匹配到字符串的结尾才结束搜索。
preg_quote()
$str="ab+cd=ef{g";

正则表达式知识点记录与学习思考

正则表达式知识点记录与学习思考

正则表达式学习总结、知识点记录正则表达式(Regular Expression),它是用一个“字符串”定义一种“模式”,然后把它应用到另一个“字符串”中用以寻找是否有与此“模式”相匹配的字符。

应用原则和你需要知道的:1、清楚的了解目标文本是正确使用RE的根本前提。

也就是说,从已知文本中提取数据与从随机文本中提取数据根本不是一回事。

2、如果某个RE基本不可能匹配到不期望的结果,使用它就是合理的。

3、RE的构建复杂度取决于你想要得到多么精准的结果,什么是最合适的解决方案取决于你可以接受的精确度、效率、对错误的容忍程度。

4、平衡法则(好的RE必须在以下方面求得平衡):1.只匹配期望的文本,排除不期望的。

2.易于控制和理解。

3.保证效率。

如果能够匹配必须很快的返回结果;如果不能应在尽可能短的时间内报告失败。

5、别忘了时常想想匹配失败的情形。

6、验证某个模式能不能获得预期的匹配结果并不困难,但如何验证它不会匹配到你不想要的东西可就没那么简单了。

也就是说把不需要匹配的情况也考虑周全并确保它们都将被排除在外往往十分困难。

7、不应该忘记考虑这样的“特殊”情形,针对“糟糕”的数据,RE不应该能够匹配。

引擎构造与基本工作机制:字符、元字符、字符组、量词、括号的组合方式决定了引擎的特性。

有两种类型的引擎:文本导向(text-directed)的DFA引擎和正则导向(regex-directed)的NFA引擎。

它们全称是:确定型有穷自动机、非确定型有穷自动机。

其中NFA又分为:传统型NFA和POSIX NFA。

本文总结的是传统NFA的引擎。

这是因为一些非常有用的特性,如:回溯(backtrack)、捕获括号(capture brace)、环视(look around)、忽略优先量词(lazy quantifiers)、反向引用(back references)、占有优先量词(possessive quantifiers)、固化分组(atomic group),只能在正则导向的引擎中实现。

正则表达式学习笔记

正则表达式学习笔记

正则表达式概要笔记个人学习时记下的笔记,包含主要的正则表达式语法,适合正则表达学习和复习,有需要的下载下。

//---正则表达式界定符,声明正则表达式的边界,正则表达式写在边界之中。

\ ---转义字符,如果要匹配的正则表达中有对和关键字相同的字符进行转义[]---匹配括号中任何一个字符,和逻辑运算符“或”相似(括号中只能写原子或原子的集合),可以使用‘|’‘-’如运算符[a-z|A-Z]表示匹配任意一个英文字母,如[a-z0-9]表示匹配任意一个英文字母或数字。

|----匹配两个或多个分支选择,两边必须是连续的多个原子,两边连续的子串做整体匹配[^]--匹配方括号中原子之外的任意原子,和[]互逆;^必须放最左边;原子-正则表达式最小匹配单位,Unicode编码的最小单位,有可见原子和不可见原子(空格'',换行'\r',tab'\t',回车'\n'为不可见原子)原子集合--------------------------------------------------------------.----匹配换行符之外的任意字符\d---匹配任意一个十进制数字\D---匹配任意一个非十进制数字,与\d互补\s---匹配一个不可见原子\S---匹配一个可见原子\w---匹配任意一个数字字母下划线\W---匹配任意一个非数字字母下划线;量词----------------------------------------------------------------------可以匹配原子和原子集合{n}--前面元素匹配n次{n,m}匹配最少n次,最多m次{n,}-前面最少出现n次*----匹配0,1,或多次+----最少出现一次?---匹配0,1次边界控制--------------------------------------------------------------^----匹配字符串开始的位置$----匹配字符串结尾的位置模式单元----------------------------------------------------()-匹配其中的整体作为一个原子修正模式--------------------------------------------------------------/末尾加模式修正标志,默认是贪婪模式;多模式可以并写;U----懒惰模式i----忽略英文大小写x----忽略空白,包括制表符,tab等s----让元字符.匹配包括换行符在内所有字符。

PHP常用正则表达式汇总

PHP常用正则表达式汇总

PHP常⽤正则表达式汇总1. 平时做⽹站经常要⽤正则表达式,下⾯是⼀些讲解和例⼦,仅供⼤家参考和修改使⽤:2. "^\d+$" //⾮负整数(正整数 + 0)3. "^[0-9]*[1-9][0-9]*$" //正整数4. "^((-\d+)|(0+))$" //⾮正整数(负整数 + 0)5. "^-[0-9]*[1-9][0-9]*$" //负整数6. "^-?\d+$" //整数7. "^\d+(\.\d+)?$" //⾮负浮点数(正浮点数 + 0)8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //⾮正浮点数(负浮点数 + 0)10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数11. "^(-?\d+)(\.\d+)?$" //浮点数12. "^[A-Za-z]+$" //由26个英⽂字母组成的字符串13. "^[A-Z]+$" //由26个英⽂字母的⼤写组成的字符串14. "^[a-z]+$" //由26个英⽂字母的⼩写组成的字符串15. "^[A-Za-z0-9]+$" //由数字和26个英⽂字母组成的字符串16. "^\w+$" //由数字、26个英⽂字母或者下划线组成的字符串17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-⽉-⽇20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // ⽉/⽇/年21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址24.25. 匹配中⽂字符的正则表达式: [\u4e00-\u9fa5]26. 匹配双字节字符(包括汉字在内):[^\x00-\xff]27. 匹配空⾏的正则表达式:\n[\s| ]*\r28. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/29. 匹配⾸尾空格的正则表达式:(^\s*)|(\s*$)30. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*31. 匹配⽹址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$32. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$33. 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?34. 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$35.36.37. 元字符及其在正则表达式上下⽂中的⾏为:38.39. \ 将下⼀个字符标记为⼀个特殊字符、或⼀个原义字符、或⼀个后向引⽤、或⼀个⼋进制转义符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

正则表达式
1.什么是正则表达式
a)例子:’/<img\s+src=\”.*?\”\s+\/>/’;这就是正则表达

b)乱七八糟的一堆字符堆砌在一起,神秘的符号,有着
奇特的意义
2.和正则表达式相识的事物?
a)乱/看不懂/神秘/意义
医生的字只有医院的人能看懂
道士的符只有道士明白
女人的心只有女人能懂
正则表达式只有程序员能看懂(所有的高级语言中都有正则表达式)
3.学习正则表达式可以做什么、
a)操作字符串时正则表达式的唯一作用
验证用户名长度是否合法
验证密码是否符合标准
验证手机号
验证URL地址
验证邮箱
BBS编辑器
Qq聊天表情
新闻采集器小偷程序
4.看看正则表达式的一些特点
a)1.正则表达式也是一个字符串
b)2.由特殊意义的字符组成的字符串
c) 3.具有一定的编写规则,也是一种模式
d)4.看做是一种编程语言
因为是用一些特殊字,按照规则编写出来的字符串,形成一种模式-正则表达式。

注意:如果正则表达式,不和函数一起使用,则他就是一个普通的字符串而已。

如果把正则表达式放入到函数中一起使用,才能发挥出正则表达式的作用。

比如:将正则表达式放入到分分隔函数,哪可以用这个正则表达式去分隔字符串。

总结:正则弊端是就是通过构建具有特定规则的模式了,在于输入的字符串信息进行比较,分隔,查找,替换等工作。

在实际应用中记住一点:能使用字符串处理函数来完成的就不要使用正则表达式来完成。

愿意:效率低。

5.PHP中提供了两套正则表达式函数库
a)Posix 扩展正则表达式函数-》ereg
b)Perl 兼容正则表达式函数->preg
(两套函数库功能一样,但是perl效率高,所以官方推荐使用perl)
6.学习正则表达式时,有两方面学习
a)1.正则表达式的模式如何编写
b)2.学习正则表达式的强大处理函数
7.正则表达式的语法(分4部)
a)1.正则定界符
b)2.正则表达式中的原子
c) 3.正则表达式中的元字符(原子修正符)
d)4.正则表达式的模式修正符
8.正则表达式的定界符
a)正则表达式的定界符是用来声明正则表达式的边界符
号。

正则表达式常用个的边界符是’/‘实际上任何非数字字
符和\之外的字符都可以做正则表达式的边界符
注意:
一个完整的正则表达式有两边界符
1.一个是字符串类型的引号边界符
2.一个是正则表达式的边界符。

9.正则表达式的原子
a)组成正则表达式的最小的单位就是原子
1.原子都有哪些内容组成?
i.所有的可见字符都是原子
ii.大部分不可见字符也是原子:比如:空格\N \R \T 这些转移字符也是原子。

\d 表示数字0-9之间的任意一个数字
\D 表示除了数字以外的任意一个字符
\s 表示所有的空白符中的任意一个字符
包括:\n \r \t 空格等
\S表示除了所有空白符之外的任意一个字符
\w 表示数字大小写字母以及下划线中任意一个字符
\W 表示除了数字大小写字母以及下划线之外的任意
一个字符。

10.正则表达式的元字符(原子修饰符)
[]原子列表
表示在指定的字符选取一个原子
[5-9]表示5,6,7,8,9连接的字符允许缩写为开始字符到结束字符。

排除列表:[^]
[^4]表示除了4之外的所有字符都可以使用
使用原子列表以及排除列表模拟以上的\D\d\S\s\w\W的效果
\d [0-9]
\D [^0-9]
\s [ \n\r\t]
\S [^ \n\r\t]
\w [0-9a-zA-Z_]
\W[^0-9a-zA-Z]
原子数量修饰符
?表示前面的原子出现1次或者0次{0,1}
+ 表示签名的原子出现1次或者多次{1,}
* 表示前面的原子出现0次1次或者多次{0,}
原子数量修饰列表
{m,n}表示前面的原子可以出现从m个到N个
{m,} 表示前面原子最少出现m次
{m}表示前面原子出现m次
字符串边界修饰符(也就是说开始和结束符)
^表示以指定字符开头的内容
$表示以指定字符结尾的内容
^字符串$表示精确匹配某一个字符(多一个少一个都不行)
注意:如果要使用^和$可以匹配每一行的开始和结束部分,需要使用后面学习的模式修正符m
选择修饰符|
模式单元()
1.改变优先级
2.将多个原子视为一个原子,目的是可以使用原子数量修饰符
3.将匹配到的括号中的内容暂时存为内存当中
4.如果使用()仅仅为了模拟一个原子使用原子数量修饰符,可以在括号的开始处使用?:来解除存于内存的作用,提高效率
5.可以将括号的内容在函数的辅助相爱进行反向引用操作。

\d{15}|\d{18}|\d{17}x 身份证
\d+\.\d+\.\d+\.\d+ 1.1.1.1 ip地址
\d{3}-\d{8}|\d{4}-\d{7} 座机号010-********
0123-1234567
[a-zA-Z]+:\/\/[^\s]* 域名
//Aaaaaaaaaaaa://asdhfjkahksjdfhlasldhflkjasdhflasdhljkf
作业:今日讲解正则的原子元字符练习三遍。

整理课堂笔记
自己写电话号验证规则
1 3 [0123456789]
1 4 7
1 5 1234567890
1 7 0178
1 8 0 1
2
3
4
5
6
7
8 9
留的在线相册写完。

模式修正符
i 忽略大小写
X 忽略正则表达式中的空白。

元字符:英文状态下的点
匹配任意一个原子除了\n
s 使得.元字符可以匹配\n
m 视为多行处理该模式下^和$可以匹配\n
e :逆向引用(先不讲)
S:加速匹配(没有效果)
U 模式改变贪婪模式
正则表达式默认是贪婪的,匹配最远的结束为止。

我们可以在正则中使用.*?匹配任意字符的同时,使用非贪婪模式。

注意:如果正则表达式为贪婪模式,使用U模式修正符后,该正则表达式为非贪婪模式匹配,如果该表达式为非贪婪模式,在使用U。

表示使用贪婪模式匹配。

课堂代码2遍。

练习题一套
预习GD库。

相关文档
最新文档