1 PHP学习笔记基础知识正则表达式是一种描述文本模式的方式。到目前为止我们使用的精确(文字)匹配也是一种正则表达式。例如,之前我们搜索了正则表达式术语,如“商店”和“送货”。在PHP中,匹配正则表达式更像是strstr()匹配而不是相等比较,因为它匹配字符串中某个位置(如果未指定,则为字符串中的任何位置)的另一个字符。例如,字符串“shop”匹配正则表达式“shop”。它还可以匹配正则表达式“h”、“ho”等。除了精确匹配字符外,还可以使用特殊字符来指定表达式的元含义。例如,使用特殊字符,您可以指定一个模式,该模式必须存在于字符串的开头或结尾,模式的某些部分可能会重复,或者模式中的字符属于某种类型。此外,您可以根据特殊字符的出现进行匹配。接下来,我们将一一讨论这些变化。2 字符集和类使用字符集可以立即给出比精确匹配更强大的正则表达式。字符集可用于匹配特定类型的任何字符;事实上,它们是一种通配符。首先,字符可以用作通配符来替换除换行符(\n)之外的任何字符。例如正则表达式:.at可以匹配“cat”、“sat”、“mat”等。这种通配符匹配通常用于操作系统中的文件名匹配。但是,使用正则表达式,您可以更具体地指定要匹配的字符类型,并且可以指示字符所属的集合。在前面的示例中,正则表达式匹配“cat”和“mat”,但它也可以匹配“#at”。如果你想将它限制为a和z之间的字符,你可以这样指定:[a-z]at方括号([])中的任何东西都是一个字符类——匹配的字符所属的字符集。请注意,方括号中的表达式仅匹配一个字符。我们可以列出一个集合,例如:[aeiou]可以用来表示元音辅音。它还可以描述一个范围,就像上面的连字符,或者一个范围集:[a-zA-Z]这个范围集代表任何大小写字母。另外,集合也可以用来表示字符不属于某个集合。例如:[^a-z]可用于匹配不在a和z之间的任何字符。将插入符号(^)括在方括号中时,表示否。当符号用在方括号外时,表示另外的意思,后面会详细介绍。3 Repetition通常,读者会希望指出一个字符串或字符类会出现不止一次。可以在正则表达式中使用两个特殊字符。符号“*”表示模式可以重复0次或多次,符号“+”表示模式可以重复1次或多次。这两个符号应该放在要执行的表达式之后。例如:[[:alnum:]]+表示“至少一个字母字符”。4 子表达式通常,将一个表达式分成几个子表达式是很有用的,例如,表示“这些字符串中至少有一个需要完全匹配”。这可以使用括号来完成,就像在数学表达式中一样。例如:(very)*large可以匹配“large”、“verylarge”、“veryverylarge”等。5 子表达式count数值表达式可以用花括号({})来指定数量允许内容重复的次数。您可以指定确切的重复次数({3}表示重复3次),或重复范围({2,4}表示重复2到4次),或带有开放底部字段的重复范围({2,}表示至少重复两次)。例如:(very){1,3}匹配“very”、“veryvery”和“veryveryvery”。6 定位到字符串的开头或结尾[a-z]模式将匹配任何包含小写字母字符的字符串。字符串是否只有一个字符,或者在整个较长的字符串中只有一个匹配字符并不重要。还可以确定特定子表达式是否出现在开头、结尾或两者。当您想要确保只有您要查找的词而没有其他词出现在字符串中时,它非常有用。插入符(^)用在正则表达式的开头,表示子串必须出现在搜索字符串的开头,字符“$”用在正则表达式的末尾,表示子串必须出现出现在字符串结尾的开头。例如,以下匹配字符串开头的bob:^bob此模式将匹配com出现在字符串末尾的字符串:com$***此模式将匹配仅包含a和a之间的一个字符的字符zString:^[a-z]$7 branch正则表达式中的竖线可以用来表示选择。比如你要匹配com、edu或者net,你可以使用这样的表达式:com|edu|net8 匹配特殊字符如果你要匹配本节前面提到的特殊字符,比如,.,{或$,它们前面必须有反斜杠(\)。如果要匹配一个反斜杠,则必须用两个反斜杠(\\)来表示。在PHP中,正则表达式模式必须用单引号引起来。双引号中的正则表达式会引入一些不必要的复杂性。PHP还使用反斜杠来转义特殊字符——例如反斜杠。如果你想匹配一个模式中的反斜杠,你必须使用两个反斜杠来表明它是一个反斜杠字符,而不是转义字符。同样,出于同样的原因,如果您希望在双引号PHP字符串中使用反斜杠字符,则必须使用两个反斜杠。这可能有点令人困惑,因为此要求的结果是表示包含反斜杠字符的正则表达式的PHP字符串需要4个反斜杠。PHP解释器将这4个反斜杠解释为2个。然后,由正则表达式解释器解析为一个。$符号也是双引号PHP字符串和正则表达式的特殊字符。要在模式中匹配$字符,必须使用“\\\$”。因为字符串是用双引号引起来的,所以PHP解释器将其解析为\$,而正则表达式解释器将其解析为$字符。9 用于智能表单在智能表单应用程序中,正则表达式至少有两个用途。第一个用途是查找客户反馈中的特定术语。使用正则表达式,您可以做得更聪明。使用字符串函数,如果要匹配“商店”、“客户服务”或“零售”,则必须进行3次不同的搜索。如果使用正则表达式,可以同时匹配这3个,如下:shop|customerservice|retail第二种用途是在程序中验证用户的邮箱地址,需要使用正则进行验证电子邮件地址的表达式以标准格式编码。这种格式由一些数字或标点符号组成,后跟符号“@”,然后是一串字母或数字和字符,再后跟“.”。(句点),后跟单词或数字,后跟连字符结果字符串(可能还有更多点,直到字符串结尾)编码如下:^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$subexpression^[a-zA-Z0-9_\-.]+表示“至少一个字母,数字、下划线、字符、句点或这些字符的组合开头”。请注意,当在字符类的开头或结尾使用句点时,句点将失去其特殊的通配符含义,而只是一个句点字符。符号“@”匹配字符“@”。而子表达式[a-zA-Z0-9\-]+匹配包含字母数字字符和连字符的主机名。请注意,我们删除了连字符,因为它是方括号内的特殊字符。字符组合“\”匹配“.”特点。我们在字符类之外使用句点,因此必须将其转义以匹配句点字符。子表达式[a-zA-Z0-9\-\.]+$匹配域名的其余部分,其中包含字母、数字、连字符和更多点(如有必要,直到字符串末尾)。不难看出,有时无效的电子邮件地址会匹配此正则表达式。找出所有无效电子邮件几乎是不可能的,但通过分析,情况会有所改善。这个表达式可以用许多不同的方式进行细化。例如,可以列出所有有效域(TLD)。限制某些对象时要非常小心,因为拒绝1%有效数据的验证函数比允许10%无效数据的验证函数更麻烦。“如果你每周读一本书,你一年就读了50本书。”快点。..不要给自己太多放弃的理由。
