当前位置: 首页 > 后端技术 > PHP

PHPRegularExpression_0

时间:2023-03-30 03:40:08 PHP

概述正则表达式(RegularExpression)是一种字符匹配工具,它以特定的规则构建一个模式,与输入的字符串数据进行比较,然后进行匹配、拆分、替换等相关操作。它的设计思想是用一种描述性语言为字符串定义一个规则,凡是符合该规则的字符串都被认为是“匹配”的。正则表达式目前有两种不同的规范:POSIX规范:在符合POSIX的UNIX系统上,grep、egrep等工具遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。PCRE规范:PerlCompatibleRegularExpressions的缩写。中文是Perl兼容的正则表达式。许多现代工具都使用PhilipHazel开发的Perl库。大多数编程语言的正则表达式也都集成了这个规范。针对两种不同的正则表达式规范,PHP提供了两套不同的函数库,分别是POSIXRegex扩展库和PCRE扩展库,每个函数库对应一个特定的正则表达式。需要注意的是,从PHP5.3.0开始,POSIXRegex扩展将被废弃,所有调用该扩展中的函数都会提示E_DEPRECATED错误。接下来,本文将对PCRE规范的正则表达式进行详细介绍。PCRE正则语法1.分隔符使用PCRE函数时,模式需要用分隔符括起来。分隔符可以是任何非字母数字、非反斜杠、非空白字符。通常,斜杠/用作分隔符。如果需要在模式中匹配定界符,则必须使用反斜杠对其进行转义。如果定界符在模式中频繁出现,更好的选择是使用其他定界符来提高可读性。2.原子原子是正则表达式最基本的单位,必须至少包含一个原子。常见的有:.匹配除换行符以外的任何字符\d匹配任何十进制数\D匹配任何非十进制字符\s匹配一个不可见的原子\S匹配一个可见的原子\w匹配任何数字、字母或下划线,与`[a-zA-Z0-9_]`\W匹配任意数字、字母或下划线,等同于`[^a-zA-Z0-9_]`[]是一个原子,匹配[]之间的一个原子[^]是一个原子,不能匹配[]之间的原子有关原子和元字符的完整列表,请参阅PCRE中的正则表达式。3、元字符元字符用于修饰原子的字符,不能单独出现。//量词{n}匹配原子恰好n次{n,}匹配原子不少于n次{n,m}匹配原子至少n次最多m次*表示前面的原子出现0ormoretimes,Equivalentto{0,}+表示前面的原子至少出现一次,equivalentto{1,}?表示前面的原子出现0次或1次,相当于{0,1}//边界限制^指定匹配的字符字符串以什么原子开头$指定匹配字符串以什么原子结尾//patternselector|multiplechoiceone//patternunit()multi-atomasalargeatom4.pattern修饰符位于整个pattern的末尾,在整个正则表达式中优先调用是对正则的功能的扩展表达。您可以一次使用一个,每个都有特定的含义,或者您可以连续使用多个符号。i//不区分大小写s//正则表达式。匹配所有字符,包括换行符U//匹配模式变为懒惰模式x//忽略空格lastPCRE正则表达式执行preg_match_all执行全局正则表达式匹配preg_match执行匹配正则表达式preg_quote转义正则表达式字符preg_replace_callback_array执行正则表达式搜索并使用回调替换preg_replace_callback执行正则表达式搜索并用回调替换preg_replace执行正则表达式搜索并替换preg_split通过正则表达式拆分字符串//match$qq='10001110@qq.com';$pattern="/^[1-9][0-9]{4,}$/";if(preg_match($pattern,$email,$match)){echo'匹配成功


';}else{echo'匹配失败
';}//split$keywords=preg_split("/[\s,]+/","超文本语言,编程");print_r($keywords);#Array([0]=>hypertext[1]=>language[2]=>programming)//替换$str='fooo';echopreg_replace('/\s\s+/','',$str);#'fooo'$count=0;echopreg_replace(array('/\d/','/\s/'),'*','xp4to',-1,$count);#xp***toecho$count;#3常见的正则表达式非空字符$pattern='/\\S+/';手机号匹配$pattern='/^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\\d{8}$/';//匹配运动$pattern='^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$';//匹配联通$pattern='^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\\d{8}$';//匹配电信$pattern='^1(3[3]|4[9]|53|7[037]|8[019])\\d{8}$';邮件匹配$pattern='/^(\w)+(\.\w+)*@(\w)+(\.\w+)+$/';URL匹配$pattern='/^https?\:////(\w+\.)+[a-z]+$/';IP地址匹配$pattern='/((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/';身份证号码匹配$pattern='/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/';中文zip代码匹配$pattern='/^[1-9]\d{5}(?!\d)$/';HTML标签匹配$pattern='/^<([a-z]+)([^<]+)(?:>(.)<\/\1>|\s+\/>)$/';中文匹配$pattern='/^[\x{4e00}-\x{9fa5}]+$/u';注意:PHP中使用\x表示十六进制数据日期匹配$pattern1='/^\d{4}-\d{1,2}-\d{1,2}$/';#2018-04-27$pattern2='/^(0?[1-9]|1[0-2])$/';#月份(01~09and1~12)$pattern3='/^((0?[1-9])|((1|2)[0-9])|30|31)$/';#Date(01~09and1~31)以上内容整理自网络,参考文章:正则表达式PCREPHP正则表达式PHP高级特性一、正则表达式用法常用正则表达式