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

PHP正则表达式入门

时间:2023-03-30 01:35:36 PHP

原文链接:PHP正则表达式入门最后修改:2019-05-1016:23:19正则表达式的很多高级用法没有涉及,只是简单介绍一下。有基础知识的可以直接查看文末正则表达式语法速查表(图片)(不涉及修饰符)表1.什么是正则表达式正则表达式(正则表达式或正则表达式)的主要用途regexp)是为了有效地搜索给定文本中的模式。这些搜索模式是使用正则表达式解析器理解的特殊格式编写的。正则表达式来源于Unix系统中一个叫做grep的程序,用来帮助用户处理字符串和操作文本。通过遵循一些基本规则,我们可以创建非常复杂的搜索模式。例如,你有一个任务:检查电子邮件或电话号码的格式是否正确。这些问题可以通过使用一些简单的命令使用正则表达式轻松解决。正则语法一开始并不那么简单,但是一旦你学会了它,你就会意识到你可以轻松地执行复杂的搜索并通过输入简短的字符从不同的角度解决问题。2.Perl兼容的正则表达式PHP使用不同的解析引擎实现了许多正则函数。PHP中主要有两种正则解析器,一种叫做POSIX,另一种叫做PCRE(PerlCompatibleRegularExpression,PerlCompatibleRegularExpression)。POSIXPHP函数前缀是ereg_。自PHP5.3发布以来,该引擎已被弃用,但让我们来看看更好更快的PCRE引擎。在PHP中,每个PCRE函数都以preg_开头,例如preg_match或preg_replace。您可以在PHP文档中阅读完整的函数列表。3.基本语法要使用正则表达式,首先需要学习语法。该语法由一系列字母、数字、点、连字符和特殊符号组成,我们可以使用不同的括号将它们组合在一起。在PHP中,每个正则表达式模式都是一个符合Perl格式的字符串。在Perl中,在正斜杠之间编写正则表达式模式,例如/hello/。在PHP中它是一个字符串'/hello/'。现在,让我们看看一些运算符,它们是正则表达式的基本构建块。语法描述^^标记模式的开始,尽管在某些情况下它可以省略$对应于^符号,$符号标志着搜索模式的结束。匹配任何单个字符?它将匹配前面的模式0次或1次+它将匹配前面的模式1次或多次*它将匹配前面的模式0次或多次\booleanor–匹配范围内的元素()将不同的模式元素组合在一起[]匹配方括号之间的任何单个字符{min,max}它用于匹配确切的字符数d匹配任何单个数字D匹配任何单个非数字w匹配单词字符,包括下划线_W匹配任何非单词字符s匹配空格与在PHP中一样另外,使用简单的斜杠\来转义正斜杠字符。示例:'/he\/llo/'为了简要了解如何使用这些运算符,让我们看一些示例:该示例显示'/hello/'匹配单词hello'/^hello/'匹配开头的hello字符串。可能的匹配如hello,helloworld,但不匹配worldhello'/hello$/'匹配字符串末尾的hello'/he.o/'匹配he和o之间的任意字符,如helo,helo,heyo,但Willnotmatchhello'/(he)?llo/'matchsuchaslloorhello'/(hello)+/'matchhello一次或多次,如hello,hellohello'/(he)*llo/'matchllo,hello,hehello,但不会匹配hellooo`'/hello\world/'`匹配单词hello或world'/[A-Z]/'匹配从A到Z的大写字母'/[abc]/'匹配a,b,c*'/abc{1}/'中的任意字符只匹配ab后的一个c字符,如abc,但不匹配abcc'/abc{1,}/'匹配ab后的一个或多个c字符,如如abc,abcc'/abc{2,4}/'匹配ab后2~4个c,如abcc、abccc、abcccc,但不匹配abc。除了运算符外,还有正则表达式修饰符可以全局改变行为搜索模式。正则表达式修饰符放在模式之后,如'/hello/i',它们由单个字母组成,例如i表示模式不区分大小写,x表示忽略模式中的空白字符。有关修饰符的完整列表,请访问PHP的在线文档。正则表达式的真正威力在于结合这些运算符和修饰符来创建相当复杂的搜索模式。4、在PHP中使用正则表达式在PHP中,我们一共有九个PCRE函数可以使用。以下是列表:preg_filter-执行正则表达式搜索和替换preg_grep-返回匹配模式的数组条目preg_last_error-返回最后执行的PCRE正则表达式的错误代码preg_match-执行匹配的正则表达式preg_match_all-执行全局正则表达式匹配preg_quote-转义正则表达式字符preg_replace-执行正则表达式搜索和替换preg_replace_callback-执行正则表达式搜索并用回调替换preg_split-通过正则表达式拆分字符串两个最常用的函数是preg_match和preg_replace。让我们首先创建一个测试字符串,我们将在其上执行正则表达式搜索。经典的HelloWorld示例:$test_string='helloworld';如果我们只想搜索单词hello或world,那么搜索模式将如下所示:preg_match('/hello/',$test_string);preg_match('/world/',$test_string);如果我们希望查看字符串是否以单词hello开头,我们只需将^字符放在搜索模式的开头,如下所示:preg_match('/^hello/',$test_string);注意,正则表达式区分大小写,上面的模式与单词hElLo不匹配。如果我们希望模式不区分大小写,则应应用以下修饰符:preg_match('/^hello/i',$test_string);请注意模式末尾正斜杠后的字符i现在让我们看一个更复杂的搜索模型。如果我们想确认一个字符串的前五个字符是由字母、数字组成呢?preg_match('/^[A-Za-z0-9]{5}/',$test_string);让我们剖析这种搜索模式。首先,通过使用^,我们指定字符串必须以字母、数字开头。这由[A-Za-z0-9]指定。A-Z表示A到Z的所有字符,a-z表示a到z的所有小写字符。{5}告诉正则表达式解析器这里正好有五个字符。如果有六个而不是五个,解析器将不会匹配任何内容。上面的正则表达式可以优化为如下形式:preg_match('/^\w{5}/',$test_string);\w表示任何字母、数字,包括下划线字符_5。这部分不存在译者注:其实还有其他更方便的替代功能,比如验证邮箱地址。您可以使用filter_var($email,FILTER_VALIDATE_EMAIL)了解更多信息。6.1验证电子邮件此函数将验证给定的电子邮件地址字符串,以查看其格式是否正确。functionvalidate_email($email_address){if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$email_address)){returnfalse;}returntrue;}6.2验证URL函数validate_url($url){returnpreg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i',$url);}6.3去除重复词我经常在文本中发现重复的词,比如thisthis。这个方便的功能删除了这些重复的单词。functionremove_duplicate_word($text){returnpreg_replace('/\b(\w+)\s\1/i',"$1",$text);}译者注:原文中的正则表达式有误,这里修正.下面是原文给出的函数:functionremove_duplicate_word($text){returnpreg_replace("/s(w+s)1/i","$1",$text);}6.4验证字母数字,虚线,下划线和空格functionvalidate_alpha($text){returnpreg_match("/^[A-Za-z0-9_-]+$/",$text);6.5验证美国邮政编码functionvalidate_zip($zip_code){returnpreg_match("/^([0-9]{5})(-[0-9]{4})?$/i",$zip_code);}7.常规备忘单7.1元字符元字符描述^标记字符串的开头$标记字符串的结尾。匹配任意单个字符\Boolean或()组元素[abc]匹配a,b,c中的任意一个[^abc]匹配除a,b,c之外的任意一个空白字符a?0或1个a,相当于a{0,1}a*0个或多个aa+1个或多个aa{2}完全匹配2个aa{,5}最多5个aa{5,10}匹配5~10aw单词字符,相当于[A-Za-z0-9_]W任何非单词字符s任何空白字符S任何非空白字符d任何数字,相当于[0-9]D任何非数字,等同于[^0-9]7.2ModeModifiersModeModifier说明iIgnorecasemMulti-linemodeSMode附加分析uMode字符串被认为是UTF-8编码译者注:以上mode修饰符区分大小写。有些修饰符在原文中没有列出,毕竟只针对初学者8.相关参考15PHPRegularExpressionforWebDevelopersMasteringRegularExpressionsinPHPIntroductiontoPHPRegex9。笔记:该部分不翻译JoelReyes多年来一直从事网站设计和编码工作,这使他成为LooneyDesigner背后的创造性思维,这是一个围绕网络和图形设计的设计资源和作品集网站。为我们写信!我们正在寻找令人兴奋和有创意的文章,如果您想投稿,请给我们发送电子邮件。