正则表达式相关字符
来源:http://www.tudoupe.com时间:2022-07-22
一、常用修饰符
| 修饰符 | 含义 | 描述 |
|---|---|---|
| i | 忽略 - 不区分大小写 | 匹配设置为不区分的字体,在搜索时不区分的字体: A 和 a 不区分。 |
| g | 全球-全球匹配 | 查找所有的匹配项。 |
| m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每个行的开始和结束,记住它是多行,而不是整个字符串的开始和结束。 |
| s | 特殊字符圈. 包括替换n | 默认情况下的圆点 . 是匹配除换行符 n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 n。 |
g修饰符
g变换器可以搜索字符串中的所有匹配:

结果:

i修饰符
i 变换器匹配不区分的大小写,例如:

运行结果如下:

m 修饰符
m修改器可以使 ^ 和 $ 匹配文本中的每个行的开始和结束。
g只匹配第一个行,并添加m来实现多个行。
代码:

运行结果:

s修饰符
s修饰符默认情况下的圆点.是 匹配除换行符 n 之外的任何字符,加上 s 之后,.中包含换行符 n。
代码如下:

运行结果:

二、元字符
下面的表包含元字符的完整列表及其在常规表达式上下文中的行为:
| 字符 | 描述 |
|---|---|
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,“n”匹配“n”字符。'n'匹配替换行。序列 '\" 匹配 "" 和 "(" 匹配 "("). |
|
| ^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 'n' 或 'r' 之后的位置。 |
| $ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 'n' 或 'r' 之前的位置。 |
| * | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 |
| + | 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 |
| ? | 例如,"do(es)?Can I match "do" or "does"?It is equal to {0,1}. |
| {n} | n是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
| {n,} | n是一个非负整数。至少匹配n 次。例如,'o{2,}'不能匹配'o'在"Bob",但在"food"中都能匹配。'o{1,}'等于'o+'。'o{0,}'等于'o*'。 |
| {n,m} | m和n是非负整数,其中n <= m。至少有n匹配和最多有m匹配。例如,"o{1,3}"将匹配"food"中的头三个o。'o{0,1}'等于'o?'。请注意,一个逗号和两个数字之间没有空间。 |
| ? | 当字符遵循其他约束时 (*, +,?, {n}, {n,}, {n,m})之后,匹配的模式并不贪婪。非贪婪模式匹配尽可能少的字符串,默认贪婪模式匹配尽可能多的字符串.例如,对于“oo”字符串,'o+?匹配一个单个“o”,“o+”匹配所有“o”。 |
| . | 匹配除换行符(n、r)之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用像"(.|n)"的模式。 |
| (pattern) | 匹配模式,得到这个匹配。所取得的匹配可以从结果匹配集合中得到,在VBScript 中使用 SubMatches 集合,在JScript中, $0..$9属性被使用。要匹配圆括号字符,请使用'('或')'。 |
| (?:pattern) | 匹配的模式但没有匹配的结果,这意味着这是没有达到的匹配,不用于以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 |
| (?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配模式字符串的开始处匹配搜索字符串。这是一场不获得比赛,也就是说,该匹配不需要为以后使用取得。例如,"Windows(?=95|98|NT|200)“Windows”在“Windows200”中可以匹配,但它不匹配Windows 3.“Windows 1”。预查不消耗字符,也就是说,在一个匹配发生后,在最近的匹配开始下一个匹配的搜索后立即,而不是从包含预览的字符开始. |
| (?!pattern) | 正向否定预查(negative assert),在任何不匹配模式的字符串开始时匹配搜索字符串。这是一场不获得比赛,也就是说,该匹配不需要为以后使用取得。例如,Windows。!95|98|NT|200)"可以匹配"Windows 3."Windows"在"1",然而,它不能与“Windows”在“Windows 200”匹配。预查不消耗字符,也就是说,在一个匹配发生后,在最近的匹配开始下一个匹配的搜索后立即,而不是从包含预览的字符开始. |
| (?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。 |
| (?<!pattern) | 反向否定预查,与正向否定预查类似,只是方向相反。例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。 |
| x|y | 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 |
| [xyz] | 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 |
| [^xyz] | 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'、'l'、'i'、'n'。 |
| [a-z] | 字段范围:匹配指定字段中的任何字段。例如,'[a-z]'可以匹配'a'到'z'范围内的任何小写字段。 |
| [^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 |
| b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
| B | 匹配非单边界。'erB'可以在"verb"中匹配'er',但不能在"never"中匹配'er'。 |
| cx | 匹配由 x 指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 |
| d | 匹配数字字符.等于[0-9]。 |
| D | 匹配非数字字符,相当于[^0-9]。 |
| f | 匹配一个替换字符,相当于x0c和cL。 |
| n | 匹配一个替换行,相当于x0a和cJ。 |
| r | 与返回符号匹配,相当于x0d和cM。 |
| s | 匹配任何空白字符,包括空格、表格、页面更改等。 相当于[ fnrtv]。 |
| S | 匹配任何非空白字符,相当于[^ fnrtv]。 |
| t | 匹配一个制表符。等价于 x09 和 cI。 |
| v | 与垂直标记匹配,相当于x0b和cK。 |
| w | 匹配字母、数字、子行,等于'[A-Za-z0-9_]'。 |
| W | 匹配非字母、数字、子行,等于'[^A-Za-z0-9_]'。 |
| xn | 匹配 n,其中,n是一个16位数字的转写值。16位数字转换值必须是确定的两个数字的长度。例如,'x41'与'A'匹配。'x041' 则等价于 'x04' & "1"。ASCII编码可以在常规表达式中使用。 |
| num | 匹配 num, 其中 num 是正整数. 参考得到的匹配. 例如,)1' 匹配同一字符的两个连续字符. |
| n | 识别一个八进制符号值或背向引用。如果 n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 |
| nm | 识别一个八进制符号值或背向引用。如果在nm之前至少有nm得到的子表达式,然后nm是一个向后引用。如果 nm 至少 有 n 项 收购,则 n 为一个后跟文字 m 的向后引用。如上述条件不满足,如果 n 和 m 等于一个八进制数 (0-7),然后nm匹配八位变换值nm。 |
| nml | 如果n是一个八进制数(0-3),m和l是两个八进制数(0-7),则八进制转换值nml匹配。 |
| un | 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, u00A9 匹配版权符号 (?)。 |
接下来,我们分析了匹配的邮箱的正常表达式,如图所示:

运行结果:

再来一个:

解析:

运行结果:

如果你想了解更多,你必须亲自去做实验。
三、字符簇
在 INTERNET 的程序中,正则表达式通常用来验证用户的输入。当用户提交一个 FORM 以后,要判断输入的电话号码、地址、EMAIL 地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。
因此,我们需要的模式的描述方法是使用更自由的模式,即字符串集。 创建一个代表所有母音的字符集,将所有母音放在括号中:
这个模式匹配任何母音字符,但只代表一个字符。 字符的范围可以由字符串表示,例如:
同样的,它们也只代表一个字符,这是很重要的。如果你想匹配一个由小写字母和数字组成的字符串,例如“a2”,“b3”或“d5”,但不是"we2","d3e4"或"w34",用这个模式:
尽管[a-z]代表了26个字母的范围,但在这里它只能与小写字母的第一个字母匹配。
前面曾经提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用 ^ 时,它表示"非"或"排除"的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字:
这个模式与 "#3"、"g4"及"-3" 是匹配的,但与 "23"、"67" 是不匹配的。下面是几个排除特定字符的例子:
特殊字符 .(点,除“新行”外,所有字符都使用在常规表达式中。因此,模型 ^.3$ 匹配任何以3号结束的字符串,并以其他非"新行"字符串开始。模型可以匹配任何字符串,除替换行(n,r)。
PHP的常用表达式包含了一些内置的通用字符串群,如下列出:
| 字符簇 | 描述 |
|---|---|
| [[:alpha:]] | 任何字母 |
| [[:digit:]] | 任何数字 |
| [[:alnum:]] | 任何字母和数字 |
| [[:space:]] | 任何空白字符 |
| [[:upper:]] | 任何大写字母 |
| [[:lower:]] | 任何小写字母 |
| [[:punct:]] | 任何标点符号 |
| [[:xdigit:]] | 任何16位数均等于[0-9a-fA-F] |
四、确定重复出现
到现在为止,你已经知道如何匹配一个字母或一个数字,但更多的情况下,你可能想匹配一个词或一个数组。一个词是由几个字母组成的.数组由几个单位组成.字符后面的括号({})或字符集以确定前面内容的发生数次。
| 字符簇 | 描述 |
|---|---|
| ^[a-zA-Z_]$ | 所有的字母和下划线 |
| ^[[:alpha:]]{3}$ | 三个字母中的单词 |
| ^a$ | 字母a |
| ^a{4}$ | aaaa |
| ^a{2,4}$ | aa,aa oraa |
| ^a{1,3}$ | a,aa或aaa |
| ^a{2,}$ | 包含两个以上a的字符串 |
| ^a{2,} | Aardvark和Aaab,但苹果不是 |
| a{2,} | 如:baad和aaa,但Nantucket不行 |
| t{2} | 两个制表符 |
| .{2} | 所有的两个字符 |
这些例子描述了花括号的三个不同用途:一个数字 {x} 表示前面的字符或字符集只出现x次;一个数字加上一个逗号 {x,} 表示前面的内容出现x次或以上:

两个由逗号 {x,y} 分开的数字表示,前面的内容至少出现 x 次,但不能超过 y 次:

我们可以把模式扩展到更多的单词或数字:
最后一个例子不太了解,是吗?这样看: 用任意的负值([-] 吗?以(^)开始,后面一个或多个数字([0-9]+),以及一个小数点(.后面一个或多个数字([0-9]+),而背后没有其他东西($)。下面你会找到更简单的方法使用它。
特殊字符 ? 与 {0,1} 是相等的,它们都代表着:0个或1个前面的内容或前面的内容是可选的。所以刚才的例子可以简化为:
特殊字符 * 与 {0,} 是相等的,它们都代表着0 个或多个前面的内容。最后,字符 + 与 {1,} 是相等的,表示1 个或多个前面的内容,所以上面的4个例子可以写成:
当然,这从技术上并不减少常规表达式的复杂性,但它可以使它们更容易阅读。
相关新闻
- 2022-08-04 WPF的由来
- 2022-08-04 Win11勒索软件防护怎么打开?Win11安
- 2022-08-04 Windows系统jdk的配置
- 2022-08-04 Windows10 OneNote怎么重新登录?如何重
- 2022-08-04 超好用的 Windows 效率工具推荐
- 2022-08-04 Windows如何在CMD或PowerShell中配置代理
- 2022-08-04 powershell和cmd对比
- 2022-08-04 【QT】Windows下QT下载安装
- 2022-08-04 windows下 C++ 实现类属性的get和set方
- 2022-08-04 Win11快速助手在哪里?Win11打开快速
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
