php正则表达式

作者&投稿:直劳 (若有异议请与网页底部的电邮联系)
PHP正则表达式~

竖线表示正则表达式的开始和结束,U和问号的作用差不多,用于设置"贪婪模式"。

正则表达式默认是贪婪的,比如你上面的(.*)<,不贪婪的情况下遇到第一个<就停止了,贪婪的情况下让.*匹配所有内容,直到最后一个<出现。

\\表示一个\,是转义,|表示正则表达式的开始或者结束。

优先匹配哪个?
通常是优先匹配左边的(从左往右执行嘛,然后又因为有贪婪性,比如[0-9]*[0-9]*去匹配123,左边的[0-9]*会匹配到12,右边的[0-9]*会匹配到3),正则表达式左边的部分会匹配到能是能使匹配成功的最长的匹配,具体原因如下:
贪婪、回溯和正则导向引正则擎的急切性:正则的{}和*合+有具贪婪性会向后匹配到他们可以匹配的尽可能多的字符串。但是如果重复性的匹配会引起整个(后面的)正则表达式匹配失败时,会引起回溯,放弃最后一次重复匹配(相当于剩余的字符串从左边增加了一位),用表达式后面的部分匹配剩余的字符串。在前面的正则匹配成功后立即用剩余的表达式部分继续匹配后面的内容,如果匹配成功会立刻返回匹配成功,不会继续回溯(php的正则表达式引擎室正则导向的)


里面的(.*)是怎么找得?
*有具贪婪性会向后匹配到.可以匹配的最大长度的字符串,最初匹配到-2011-2012,然后因为回溯不断减少匹配的值,直到匹配-201。

过程是怎样的,
执行顺序:
1.[0-9]{2,4}会先匹配到2010,
2.然后(.*),因为*得贪婪性会匹配到后面所有.能匹配的字符-2011-2012。
3.此时表达式执行到[0-9]{1,2},因为[0-9]{1,2}此时没有任何可以匹配的内容,所以引起回溯(.*)匹配到前一次匹配结果的倒数第2位重新匹配到-2011-201,[0-9]{1,2}与最后一位匹配成功得到字符串最后面的2,因为正则引擎的急切性,匹配成功后会立即用正则表达式剩余的部分继续向后匹配。
4.此时表达式执行到\1,字符串后面没有剩下任何东西所以\1 (\1指(.*)匹配的结果-2011-201)匹配失败,然后引起回溯。[0-9]{1,2}向前移一位,结果[0-9]{1,2}没有字符可以进行匹配操作,匹配失败。引起回溯,(.*)匹配到前一次匹配结果的倒数第2位重新匹配到-2011-20,再用[0-9]{1,2}匹配得到12,后面依然没有字符与\1匹配,引起回溯,此次[0-9]{1,2}匹配到1,\1(此时值为-2011-20)与2匹配再次失败。于是重复上面的回溯【此处省去n百字,总之是重复上面的回溯】,直到(.*)匹配到-201,\1匹配到了-2012中的-201,因为正则导向的正则引擎是急切的,不再进行回溯,继续后面的匹配。
5.最后,[0-9]{1,2}与字串剩余部(最后一个字符)2匹配成功返回,因为正则导向的正则引擎是急切的,所以立刻返回匹配结果,不再进行回溯。

睡觉前看到的没想到写出来这么难,不过也没白写,就当总结了。

[0-9]{2,4}2到4个数字
(.*)
0-无数个任意字符
[0-9]{1,2}1到2个数字
\1不知道
[0-9]{1,2}1到2个数字
这个是一段简单的正则表达式

php正则 匹配 数字0-10
答:匹配数字0-10的php正则表达式 ^([0-9]|10)完整的php程序如下 <?php$str="10"; $regex="/^([0-9]|10)$/"; if (preg_match($regex,$str)){ print_r("匹配"); }else{ print_r("不匹配"); }?>运行结果匹配

PHP 正侧表达式问题
答:1./^a[a-z]*a$/ 2./^a[a-z]*(a|\/)$/ 3./^[1-9](\d*)/ 4./^[1-9]?(\d*)[02468]$/ 不知道写的对不对,你在看看吧

PHP用正则表达式做注册页面
答:// 如果所有表单数据都合法,就将数据插入数据库或执行其他操作 上述代码中,使用了 PHP 的 preg_match 函数来进行正则表达式匹配。如果正则表达式匹配成功,函数返回 1,否则返回 0。通过判断返回值来确定表单数据是否合法。当然,这只是一个示例,具体的正则表达式和表单验证逻辑需要根据实际情况进行调整。

PHP正则表达式问题:/<[^>].*?>.*?<\/>/si 这是一句过滤所有脚本的表达 ...
答:<除了“>”的任意n个字符字符>任意字符</>,不分大小写 大多数正则表达式的解析都一样的,i表示不区分大小写,s是修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。[^>]表示匹配非>字符,“.”表示匹配所有的字符。<\/>匹配</>,\是转义符,\/...

求一条php做的正则表达式
答:2 什么是正则表达式:简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术...

网址中带有中文字符的php正则表达式
答:意思是:不是“`”字符,除了“`”的一切字符,包括中文,重复一次或多次。为什么要这样表示中文字符的集合呢?可能是因为在正则表达式中没有表示中文字符的字符类或集合或范围。甚至[[:print:]]+都不行!测试如下:<?php str='ffdjsfjshgfhfg<12><模式>d<括号内的部分>f符类中fs<字符类中可try...

求用php正则表达式来替换字符的写法。
答:或者 Control+Return 或 Shift+Return 或 Command+ Return (Macintosh) 回车符。确保如果没有使用正则表达式,则在搜索时取消对“忽略空白差别”的选择。请注意,这匹配特定字符,而不是一般意义上的换行符;例如,它不匹配 标签或 标签。回车符在“设计”视图中显示为空格而不是换行符。

php怎么写获取两个标签内的内容的正则表达式啊?
答:<?php/*PHP正则提取图片img标记中的任意属性*/$str = 'PHP正则提取或更改图片img标记中的任意属性';//1、取整个图片代码preg_match('/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i',$str,$match);echo $match[0];//2、取widthpreg_match('//i',$st...

php 正则表达式 url匹配
答:2,preg_match(mode,string);它的返回值是一个整数,0或1,0表示匹配不成功,1表示匹配成功,preg_match()将在第一个匹配成功后停止搜索,不再继续匹配。3,preg_match_all(模式,字符串,保存匹配结果数组(multidimensional array));在搜索字符串中,所有匹配的模式都提供正则表达式的匹配结果,...

帮我分析一下php正则表达式
答:这个正则表达式表示一个区号-号码..这样格式的电话号码吧..说白点就是区号...//这个是正则表达式的形式...然后..\d表示任意数字..{3,4}表示一个范围...也就是说...任意3或者4个的数字组合就行...如果这样写\d{3,}则表示至少3个数字..{3}这样就是3个数字组合...然后-就是一个’...