正则表达式-匹配规则

 2024-01-30 04:02:05  阅读 0

正则表达式 - 匹配规则 基本模式匹配

一切从基础开始。 模式是正则表达式最基本的元素。 它们是描述字符串特征的一组字符。 模式可以很简单,由普通字符串组成,也可以非常复杂,通常使用特殊字符来表示一系列字符、重复或表示上下文。 例如:

^once

该模式包含一个特殊字符^,表示该模式仅匹配以once开头的字符串。 例如,此模式匹配字符串“once Upon a time”,但不匹配“There Once was a man from”。 正如 ^ 符号指示开头一样,$ 符号匹配以给定模式结尾的字符串。

bucket$

此模式匹配“谁将所有现金存放在“但不是”中”。 字符 ^ 和 $ 一起使用时表示完全匹配(字符串与模式相同)。 例如:

^bucket$

仅匹配字符串“”。 如果模式不包含 ^ 和 $,则它匹配包含该模式的任何字符串。 例如模式:

once

带绳子

There once was a man from NewYork
Who kept all of his cash in a bucket.

正在匹配。

此模式中的字母(一次)是文字字符,也就是说,它们代表字母本身,数字也是如此。 其他一些稍微复杂的字符,例如标点符号和白色字符(空格、制表符等),需要转义序列。 所有转义序列均以反斜杠 \ 开头。 制表符的转义序列是 \t。 因此,如果我们想检查字符串是否以制表符开头,我们可以使用以下模式:

^\t 

同样,用\n表示“换行”,用\r表示回车。 可以使用其他特殊符号,前面加一个反斜杠。 例如,反斜杠本身由 \\ 表示,句点由 \. 表示,等等。

字符簇

在程序中,经常使用正则表达式来验证用户输入。 当用户提交FORM时,使用普通文字字符来确定输入的电话号码、地址、电子邮件地址、信用卡号等是否有效是不够的。

所以我们需要用一种更自由的方式来描述我们想要的模式,这就是字符簇。 要创建代表所有元音字符的簇,请将所有元音字符放在方括号中:

[AaEeIiOoUu]

此模式匹配任何元音字符,但只能表示一个字符。 使用连字符表示一系列字符,例如:

表达式正则判断数字用什么_用正则表达式判断数字_表达式正则判断数字用什么函数

[a-z] // 匹配所有的小写字母 
[A-Z] // 匹配所有的大写字母 
[a-zA-Z] // 匹配所有的字母 
[0-9] // 匹配所有的数字 
[0-9\.\-] // 匹配所有的数字,句号和减号 
[ \f\r\t\n] // 匹配所有的白字符

再说一次,这些只代表一个角色,而且是一个非常重要的角色。 如果要匹配由小写字母和数字组成的字符串,例如“z2”、“t6”或“g7”,但不匹配“ab2”、“r2d3”或“b52”,请使用以下模式:

^[a-z][0-9]$

虽然[az]代表26个字母的范围,但这里它只能匹配第一个字符是小写字母的字符串。

前面提到^代表字符串的开头,但它还有另外的含义。 当 ^ 用在方括号内时,表示“不”或“排除”,通常用于消除某个字符。 使用前面的示例,我们要求第一个字符不能是数字:

^[^0-9][0-9]$

此模式匹配“&5”、“g7”和“-2”,但不匹配“12”或“66”。 以下是排除特定字符的一些示例:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

正则表达式中使用特殊字符(点、句点)来表示除“换行符”之外的所有字符。 因此,模式 ^.5$ 匹配任何以数字 5 结尾并以其他非“换行”字符开头的两字符字符串。 图案。 可以匹配除换行符(\n、\r)之外的任何字符串。

PHP的正则表达式有一些内置的通用字符簇,列表如下:

字符簇描述

[[:α:]]

任何字母

[[:数字:]]

任何数字

[[:alnum:]]

任何字母和数字

[[:空间:]]

任何空白字符

[[:上:]]

任何大写字母

[[:降低:]]

任何小写字母

[[:标点符号:]]

任何标点符号

[[::]]

任意十六进制数,相当于 [0-9a-fA-F]

确定复发

到目前为止,您已经知道如何匹配字母或数字,但通常情况下,您可能想要匹配一个单词或一组数字。 一个单词由几个字母组成,一组数字由几个单数组成。 字符或字符簇后面的花括号 ({}) 用于确定前面内容的重复次数。

字符簇描述

^[a-zA-Z_]$

所有字母和下划线

^[[:阿尔法:]]{3}$

所有 3 个字母的单词

^a$

字母a

^a{4}$

啊啊啊

^a{2,4}$

aa、aaa 或 aaaa

^a{1,3}$

a、aa 或 aaa

^a{2,}$

包含两个以上 a 的字符串

^a{2,}

如:和aaab,但不是apple

a2,}

如:baad和aaa,但不是

\t{2}

两个标签

.{2}

所有两个字符

这些示例描述了花括号的三种不同用途。 数字{x}表示前面的字符或字符簇仅出现x次; 数字加逗号{x,}表示前面内容出现x次及以上; 以逗号分隔的两个数字{x,y}表示前面的内容至少出现x次,但不超过y次。 我们可以将模式扩展到更多单词或数字:

^[a-zA-Z0-9_]{1,}$      // 所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]{0,}$        // 所有的正整数 
^\-{0,1}[0-9]{1,}$      // 所有的整数 
^[-]?[0-9]+\.?[0-9]+$   // 所有的浮点数

最后一个例子不太容易理解,是吗? 可以这样想:以可选的减号 ([-]?) (^) 开头,后跟 1 个或多个数字 ([0-9]+),以及小数点 (\.),后跟 1 个或更多数字 ([0-9]+),其后没有其他数字 ($)。 下面您将了解可以使用的更简单的方法。

特殊字符? 等于{0,1},都表示:0或1个前面的内容或者前面的内容是可选的。 所以刚才的例子可以简化为:

^\-?[0-9]{1,}\.?[0-9]{1,}$

特殊字符*等于{0,},它们都代表0个或多个先前的内容。 最后,字符+等于{1,},表示前面的一个或多个内容,所以上面的四个例子可以写成:

^[a-zA-Z0-9_]+$      // 所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$        // 所有的正整数 
^\-?[0-9]+$          // 所有的整数 
^[-]?[0-9]+(\.[0-9]+)?$ // 所有的浮点数

当然,这在技术上并没有降低正则表达式的复杂性,但它使它们更易于阅读。

标签: 字符 匹配 字母

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码