php正则表达式基本语法(求一条php做的正则表达式)

:暂无数据 2026-05-03 06:20:03 0
今天这份关于php正则表达式基本语法的指南,将用80%的篇幅讲透求一条php做的正则表达式这个决定成败的细节,绝对让你不虚此行。

本文目录

求一条php做的正则表达式

PHP中的正则式使用
PHP被大量的应用于Web的后台CGI开发,通常是在用户数据数据之后得出某种结果,但是如果用户输入的数据不正确,就会出现问题,比如说某人的生日是”2月30日”!那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配。
2 什么是正则表达式:
简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用。
在某个Linux网站上面有这样的话:”如果你问一下Linux爱好者最喜欢什么,他可能会回答正则表达式;如果你问他最害怕什么,除了繁琐的安装配置外他肯定会说正则表达式。”
正如上面说的,正则表达式看起来非常复杂,让人害怕,大多数的PHP初学者都会跳过这里,继续下面的学习,但是PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者用指定的字符串来替代符合条件的字符串等强大的功能,不学实在太可惜了……
3 正则表达式的基本语法:
一个正则表达式,分为三个部分:分隔符,表达式和修饰符。
分隔符可以是除了特殊字符以外的任何字符(比如”/ !”等等),常用的分隔符是”/”。表达式由一些特殊字符(特殊字符详见下面)和非特殊的字符串组成,比如”+”可以匹配一个简单的电子邮件字符串。修饰符是用来开启或者关闭某种功能/模式。下面就是一个完整的正则表达式的例子:
/hello.+?hello/is
上面的正则表达式”/”就是分隔符,两个”/”之间的就是表达式,第二个”/”后面的字符串”is”就是修饰符。
在表达式中如果含有分隔符,那么就需要使用转义符号”",比如”/hello.+?/hello/is”。转义符号除了用于分隔符外还可以执行特殊字符,全部由字母构成的特殊字符都需要”"来转义,比如”d”代表全体数字。
4 正则表达式的特殊字符:
正则表达式中的特殊字符分为元字符、定位字符等等。
元字符是正则表达式中一类有特殊意义的字符,用来描述其前导字符(即元字符前面的字符)在被匹配的对象中出现的方式。元字符本身是一个个单一的字符,但是不同或者相同的元字符组合起来可以构成大的元字符。
元字符:
大括号:大括号用来精确指定匹配元字符出现的次数,例如”/pre{1,5}/”表示匹配的对象可以是”pre”、”pree”、”preeeee”这样在”pr”后面出现1个到5个”e”的字符串。或者”/pre{,5}/”代表pre出现0此到5次之间。
加号:”+”字符用来匹配元字符前的字符出现一次或者多次。例如”/ac+/”表示被匹配的对象可以是”act”、”account”、”acccc”等在”a”后面出现一个或者多个”c”的字符串。”+”相当于”{1,}”。
星号:”*”字符用来匹配元字符前的字符出现零次或者多次。例如”/ac*/”表示被匹配的对象可以是”app”、”acp”、”accp”等在”a”后面出现零个或者多个”c”的字符串。”*”相当于”{0,}”。
问号:”?”字符用来匹配元字符前的字符出现零次或者1次。例如”/ac?/”表示匹配的对象可以是”a”、”acp”、”acwp”这样在”a”后面出现零个或者1个”c”的字符串。”?”在正则表达式中还有一个非常重要的作用,即”贪婪模式”。
还有两个很重要的特殊字符就是”/”,就可以匹配任何单个小写字母,比如”a”、”b”等等。
如果在”“的默认值:
:匹配任何字母
:匹配任何字母和数字
:匹配任何数字
:匹配空格符
:匹配任何大写字母
:匹配任何小写字母
:匹配任何标点符号
:匹配任何16进制数字
另外下面这些特殊字符在转义符号”"转义后代表的含义如下:
s:匹配单个的空格符
S:用于匹配除单个空格符之外的所有字符。
d:用于匹配从0到9的数字,相当于”//”。
w:用于匹配字母,数字或下划线字符,相当于”//”。
W:用于匹配所有与w不匹配的字符,相当于”//”。
D:用于匹配任何非10进制的数字字符。
.:用于匹配除换行符之外的所有字符,如果经过修饰符”s”的修饰,”.”可以代表任意字符。
利用上面的特殊字符可以很方便的表达一些比较繁琐的模式匹配。例如”/d0000/”利用上面的正则表达式可以匹配万以上,十万一下的整数字符串。
定位字符:
定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进行描述。
^:表示匹配的模式出现在匹配对象的开头(和在”“里面不同)
$:表示匹配的模式出现在匹配对象的末尾
空格:表示匹配的模式出现在开始和结尾的两个边界之一
“/^he/”:可以匹配以”he”字符开头的字符串,比如hello、height等等;
“/he$/”:可以匹配以”he”字符结尾的字符串即she等;
“/ he/”:空格开头,和^的作用一样,匹配以he开头的字符串;
“/he /”:空格结束,和$的作用一样,匹配以he结尾的字符串;
“/^he$/”:表示只和字符串”he”匹配。
括号:
正则表达式除了可以用户匹配,还可以用括号”()”来记录需要的信息,储存起来,给后面的表达式读取。比如:
/^()$/
就是记录邮件地址的用户名,和邮件地址的服务器地址(*****之类的),在后面如果想要读取记录下来的字符串,只是需要用”转义符+记录的次序”来读取。比如”1〃就相当于第一个”)。但是在PHP中,”"是一个特殊的字符,需要转义,所以”"到了PHP的表达式中就应该写成”1〃。
其他特殊符号:
“|”:或符号”|”和PHP里面的或一样,不过是一个”|”,而不是PHP的两个”||”!意思就是可以是某个字符或者另一个字符串,比如”/abcd|dcba/”可能匹配”abcd”或者”dcba”。
5 贪婪模式:
前面在元字符中提到过”?”还有一个重要的作用,即”贪婪模式”,什么是

php 正则表达式 url匹配

1,preg_grep(pattern,array);它的返回值是一个新数组,新数组的元素是成功匹配的元素。

2,preg_match(mode,string);它的返回值是一个整数,0或1,0表示匹配不成功,1表示匹配成功,preg_match()将在第一个匹配成功后停止搜索,不再继续匹配。

3,preg_match_all(模式,字符串,保存匹配结果数组(multidimensional array));在搜索字符串中,所有匹配的模式都提供正则表达式的匹配结果,并以指定的顺序将它们输出到指定的数组。它执行与字符串末尾匹配的全局正则表达式匹配。

4,preg_quote(string);转义正则表达式字符,preg_quote()需要一个参数字符串,并在每个正则表达式语法中为该字符添加反斜杠。

5,转换效果如图所示。

php的时间正则表达式

最简单的正则 如 : \d{4}-\d{2}-\d{2}
但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....
对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。
UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。
先考虑与年份无关的前三条规则,年份可统一写作
(?!0000){4}
下面仅考虑月和日的正则
1. 包括平年在内的所有年份的月份都包含1-28日
(0)
2. 包括平年在内的所有年份除2月外都包含29和30日
(0)-(29|30)
3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日
(0)-31)
合起来就是除闰年的2月29日外的其它所有日期
(?!0000))-31)
接下来考虑闰年的实现
1 : 四年一闰
()
2 : 百年不闰,四百年再闰
(0)00
3 : 合起来就是所有闰年的2月29日
()00)-02-29)
四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则
^((?!0000))00)-02-29)$
考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。
^(?:(?!0000))00)-02-29)$

PHP正则表达式的使用技巧

  PHP正则表达式的定义

  用于描述字符排列和匹配模式的一种语法规则 它主要用于字符串的模式分割 匹配 查找及替换操作

  PHP中的正则函数

  PHP中有两套正则函数 两者功能差不多 分别为

  一套是由PCRE(Perl Compatible Regular Expression)库提供的 使用 preg_ 为前缀命名的函数

  一套由POSIX(Portable Operating System Inte***ce of Unix )扩展提供的 使用以 ereg_ 为前缀命名的函数 (POSIX的正则函数库 自PHP 以后 就不在推荐使用 从PHP 以后 就将被移除)

  由于POSIX正则即将推出历史舞台 并且PCRE和perl的形式差不多 更利于我们在perl和php之间切换 所以这里重点介绍PCRE正则的使用

  PCRE正则表达式

  PCRE全称为Perl Compatible Regular Expression 意思是Perl兼容正则表达式

  在PCRE中 通常将模式表达式(即正则表达式)包含在两个反斜线 / 之间 如 /apple/

  正则中重要的几个概念有 元字符 转义 模式单元(重复) 反义 引用和断言 这些概念都可以在文章中轻松的理解和掌握

  常用的元字符(Meta character)

  元字符     说明

  /A       匹配字符串串首的原子

  /Z       匹配字符串串尾的原子

  /b       匹配单词的边界     //bis/   匹配头为is的字符串   /is/b/   匹配尾为is的字符串   //bis/b/ 定界

  /B       匹配除单词边界之外的任意字符   //Bis/   匹配单词 This 中的 is

  /d     匹配一个数字 等价于

  /D     匹配除数字以外任何一个字符 等价于

  /w     匹配一个英文字母 数字或下划线 等价于

  /W     匹配除英文字母 数字和下划线以外任何一个字符 等价于

  /s     匹配一个空白字符 等价于

  /S     匹配除空白字符以外任何一个字符 等价于

  /f     匹配一个换页符等价于 /x c 或 /cL

  匹配一个换行符 等价于 /x a 或 /cJ

  匹配一个回车符等价于/x d 或 /cM

  /t     匹配一个制表符 等价于 /x /或/cl

  /v     匹配一个垂直制表符 等价于/x b或/ck

  /oNN   匹配一个八进制数字

  /xNN   匹配一个十六进制数字

  /cC    匹配一个控制字符

  模式修正符(Pattern Modifiers)

  模式修正符在忽略大小写 匹配多行中使用特别多 掌握了这一个修正符 往往能解决我们遇到的很多问题

  i     -可同时匹配大小写字母

  M     -将字符串视为多行

  S     -将字符串视为单行 换行符做普通字符看待 使 匹配任何字符

  X     -模式中的空白忽略不计  

  U     -匹配到最近的字符串

  e     -将替换的字符串作为表达使用

  格式 /apple/i匹配 apple 或 Apple 等 忽略大小写      /i

  PCRE的模式单元

  // 提取第一位的属性

  /^/d{ } ( 的结果 / 已经被存储 下个位置 / 引用时 其匹配模式也是字符 /

  当不需要存储匹配结果时使用非存储模式单元 (? )

  例如/(?:a|b|c)(D|E|F)// g/ 将匹配 aEEg 在一些正则表达式中 使用非存储模式单元是必要的 否则 需要改变其后引用的顺序 上例还可以写成/(a|b|c)(C|E|F)/ g/

  PCRE正则表达式函数

  以下为引用的内容

  preg_match()和preg_match_all()   preg_quote()   preg_split()   preg_grep()   preg_replace()  

  函数的具体使用 我们可以通过PHP手册来找到 下面分享一些平时积累的正则表达式

  匹配action属性

  以下为引用的内容

  $str = ;       $match = ;       preg_match_all( //s+action=/ (?!)( *?)/ /s/ $str $match);       print_r($match);   

  在正则中使用回调函数

  以下为引用的内容

  /**      * replace some string by callback function      *      */    function callback_replace() {         $url = ;         $str = ;         $str = preg_replace ( /(?《=/saction=/ )(?!)( *?)(?=/ /s)/e search(/$url // ) $str );                  echo $str;     }          function search($url $match){         return $url / $match;     }   

  带断言的正则匹配

  以下为引用的内容

  $match = ;      $str = xxxxxx cn bold font  paragraph text

   ;      preg_match_all ( /(?《=《(/w{ })》) *(?=《/// 》)/ $str $match );      echo 匹配没有属性的HTML标签中的内容 ;      print_r ( $match );   

  替换HTML源码中的地址

  以下为引用的内容

  $form_ = preg_replace ( /(?《=/saction=/ |/ssrc=/ |/s)(?!|javascript)( *?)(?=/ /s)/e add_url(/$url / // / ) $form_ );   

lishixinzhi/Article/program/PHP/201311/21027

世界在变,php正则表达式基本语法的内涵也在延伸,但求一条php做的正则表达式作为其基石的地位不变。把握不变,应对万变。
本文编辑:admin

更多文章:


异步事件是什么意思(名词解释:同步、异步、阻塞和非阻塞)

异步事件是什么意思(名词解释:同步、异步、阻塞和非阻塞)

为什么说不懂名词解释:同步、异步、阻塞和非阻塞,就等于没学明白异步事件是什么意思?这篇文章将给你一个令人信服的解释。

2026年5月3日 08:40

数据结构c语言顺序表(数据结构中,顺序表和C语言数组的区别是什么)

数据结构c语言顺序表(数据结构中,顺序表和C语言数组的区别是什么)

花费5分钟阅读本文,您将获得对数据结构c语言顺序表和数据结构中,顺序表和C语言数组的区别是什么的清晰认知,远超自己搜索数小时的效果。

2026年5月3日 08:20

家里的阀门需要关闭吗?(煤气阀门需要每次关吗)

家里的阀门需要关闭吗?(煤气阀门需要每次关吗)

常言道:“万丈高楼平地起”。理解家里的阀门需要关闭吗?这座大厦,也必须从煤气阀门需要每次关吗这块基石开始。

2026年5月3日 08:00

数据库种类有哪些(数据库有哪些类型)

数据库种类有哪些(数据库有哪些类型)

是不是总觉得数据库种类有哪些的知识体系太庞大,数据库有哪些类型更是无从下手?本文将帮你化繁为简,抓住核心。

2026年5月3日 07:40

C++中,如何实例化一个类实例.?什么样的抽象类不能产生类的实例(怎么定义抽象类)

C++中,如何实例化一个类实例.?什么样的抽象类不能产生类的实例(怎么定义抽象类)

老铁们,关于类的实例,你可能听过不少说法。今天,咱们就坐下来好好聊聊C++中,如何实例化一个类实例.,保证让你豁然开朗。

2026年5月3日 07:20

connection with(have a connection with和have to do with的区别)

connection with(have a connection with和have to do with的区别)

您是否正在为搞不清connection with和have a connection with和have to do with的区别的关系而烦恼?恭喜,这篇干货就是您的“及时雨”。

2026年5月3日 07:00

pythondatetime模块(datetime是python的标准库吗)

pythondatetime模块(datetime是python的标准库吗)

这篇文章给大家聊聊关于pythondatetime模块,以及datetime是python的标准库吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年5月3日 06:40

php正则表达式基本语法(求一条php做的正则表达式)

php正则表达式基本语法(求一条php做的正则表达式)

今天这份关于php正则表达式基本语法的指南,将用80%的篇幅讲透求一条php做的正则表达式这个决定成败的细节,绝对让你不虚此行。

2026年5月3日 06:20

valueof方法是如何使用的(java 中 valueof 方法的使用)

valueof方法是如何使用的(java 中 valueof 方法的使用)

正如一位名家所言:“弄懂java 中 valueof 方法的使用,是通往valueof方法是如何使用的殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年5月3日 06:00

随机数字记忆(二进制数字记忆)

随机数字记忆(二进制数字记忆)

承接之前对随机数字记忆的讨论,本篇我们将视角下沉,专门来聊聊实操中无法回避的二进制数字记忆问题,让知识落地。

2026年5月3日 05:40

最近更新

connection with(have a connection with和have to do with的区别)
2026-05-03 07:00:03 浏览:0
pythondatetime模块(datetime是python的标准库吗)
2026-05-03 06:40:03 浏览:0
随机数字记忆(二进制数字记忆)
2026-05-03 05:40:03 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
mysql insert into字段顺序问题(mysql insert into的问题)
2026-04-13 16:00:02 浏览:1
标签列表