{n,m}
重复n到m次
例子
转义字符
特殊字符主要是指空格、制表符、其他基数(十进制以外的编码方式)等的注入,其特点是前面有转义字符()。如果需要引用这些特殊字符的字面意思,也需要对它们进行转义。
字符含义
角色本身
匹配角色本身
\r
匹配回车
\n
匹配换行符
\t
制表符
\f
页面变更
\x#
匹配十六进制数字
\cX
匹配控制字符
字符类
查找数字、字母或数字、空格很容易,因为已经有与这些字符集对应的元字符,但如果要匹配没有预定义元字符的字符集(例如元音 a、e、i、o、u ),应该怎么办?
很简单,你只需要将它们列出在方括号中,例如 [aeiou] 匹配任何英语元音,[.?!] 匹配标点符号(. 或 ? 或 !)。我们还可以很方便地指定一个字符范围,比如[0-9],它代表的含义与\d完全相同:单个数字;类似地,[a-z0-9A-Z_]也完全等价于\w(如果只考虑英文单词)。
这是一个更复杂的表达式:\(?0\d{2}[)-]?\d{8}。
这个表达式可以匹配多种格式的电话号码,如 (010)、or、or 等。我们来分析一下:首先有一个转义字符 \( ,可以出现 0 次或 1 次 (?),然后是0,后跟 2 个数字 (\d{2}),然后) 或 - 或其中一个空格,是否出现 1 次 (?),最后是 8 位数字 (\d{8})。
使用该工具可视化显示,如下所示:

“(”和“)”也是元字符,后面分组部分会提到,所以这里需要转义。
分支条件
不幸的是,刚才的表达式也可能匹配“不正确”的格式,例如010)或(。为了解决这个问题,我们需要使用分支条件。正则表达式中的分支条件是指有多少个如果满足这些规则中的任何一个,应该算是匹配吧,具体方法就是用|分隔不同的规则,看不懂?
0\d{2}-\d{8}|0\d{3}-\d{7} 此表达式可以匹配两个以连字符分隔的电话号码:一个是三位数的区号,另一个是 8 位的本地号码号码(如),一位是4位区号和7位本地号码(0376-)。

\(0\d{2}\)[-]?\d{8}|0\d{2}[-]?\d{8} 此表达式匹配带有 3 位区号的电话号码,其中区号可以使用括号,可以使用也可以不使用,区号和本地代码之间可以用连字符或空格分隔,也可以不分隔。您可以尝试使用分支条件来扩展此表达式,使其也支持 4 位区号。

\d{5}-\d{4}|\d{5} 此表达式用于匹配美国的邮政编码。美国邮政编码的规则是 5 位数字,或由连字符分隔的 9 位数字。之所以给出这个例子,是因为它可以说明一个问题:使用分支条件时,要注意各个条件的顺序。如果将其更改为 \d{5}|\d{5}-\d{4},则仅匹配 5 位邮政编码(以及 9 位邮政编码的前 5 位)。原因是匹配分支条件时,每个条件都会从左到右进行测试。如果满足某个分支,则不考虑其他条件。
团体
我们已经提到了如何重复单个字符(只需在字符后面添加限定符即可);但如果你想重复多个字符怎么办?您可以使用括号指定子表达式(也称为分组),然后可以指定该子表达式的重复次数。还可以对子表达式进行其他操作(稍后介绍)。
(\d{1,3}\.){3}\d{1,3} 是一个简单的 IP 地址匹配表达式。要理解这个表达式,请按以下顺序分析:\d{1,3} 匹配 1 到 3 位数字,(\d{1,3}\.){3} 匹配三位数加一个英语 句号(整体即为组)重复三次,最后添加一个一到三位数的数字 (\d{1,3})。
不幸的是,它也会匹配不可能的 IP 地址 256.300.888.999。如果可以使用算术比较,也许可以简单地解决这个问题,但是正则表达式不提供任何数学函数,所以只能使用冗长的分组、选择和字符类来描述一个正确的IP地址:( (2 [0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]| [01 ]?\d\d?)。

理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?。我这里就不详细说了。你应该可以自己分析一下。意义。
IP地址中的每个数字不能大于255。经常有人问我,前面带0的数字01.02.03.04是正确的IP地址吗?答案是:是的,IP地址中的数字可以包含前导数字。 0 ( )。
反义词
有时需要查找不属于某些容易定义的字符类的字符。例如,如果要查找数字以外的任何字符,则需要使用反义词:
常用反义词
代码/语法说明
\W
匹配除字母、数字、下划线或汉字之外的任何字符
\S
匹配任何非空白字符
\D
匹配任何非数字字符
\B
匹配单词开头或结尾以外的内容
[x]
匹配除 x 之外的任何字符
[^aeiou]
匹配除 aeiou 之外的任何字符。
例子
反向引用(部分支持)
使用括号指定子表达式后,与子表达式匹配的文本(即本组捕获的内容)可以在表达式或其他程序中进一步处理。默认情况下,每个组都会自动有一个组号。规则是:从左到右,以组的左括号为标记,第一个出现的组的组号为1,第二个为2,以此类推。类比。
反向引用用于重复搜索与前一组匹配的文本。例如\1代表第1组匹配的文本,很难理解?参见示例:
\b(\w+)\b\s+\1\b 可用于匹配重复的单词,例如 go go 或 kitty kitty。该表达式首先是一个单词,即单词的开头和结尾之间有多个字母或数字 (\b(\w+)\b)。这个单词会在编号为1的组中被捕获,然后是一个或多个空白字符(\s+),最后是在组1中捕获的内容(即之前匹配的单词)(\1)。

您还可以自己指定子表达式的组名称。要指定子表达式的组名,请使用以下语法:(?\w+)(或将尖括号替换为 ': (?'Word'\w+)),这样 \w+ 的组名就被指定为单词。要反向引用该组捕获的内容,可以使用 \k,因此前面的示例也可以这样写:\b(?\w+)\b\s+\k\b。
使用括号时,有许多特殊用途的语法。下面列出了一些最常用的:
分类代码/语法描述
捕获
(经验值)
将 exp 和捕获文本匹配到自动命名的组中
捕获
(?exp)
匹配exp并将文本捕获到名为name的组中,也可以写为(?'name'exp)
捕获
(?:exp)
匹配exp,不捕获匹配文本,也不给该组分配组号
零宽度断言
(?=表达式)
匹配exp之前的位置
零宽度断言
(?, 零宽度负向回溯后跟一个断言,断言表达式 exp 在此位置之前无法匹配: (?az])\d{7} 匹配前面没有小写字母的七位数字。
一个更复杂的例子:(?[^]*(((?'Open'
[^>]*>)[^]*)+((?'-打开'
)[^]*)+)*(?(打开)(?!))
工具
网上有很多可视化的正则表达式学习或者调试工具,有的可以自动生成测试用例等。比如下面的邮件验证正则表达式:
//Email正则
/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test("wowohoo@qq.com");
//输出 true
// 1.邮箱以a-z、A-Z、0-9开头,最小长度为1.
// 2.如果左侧部分包含-、_、.则这些特殊符号的前面必须包一位数字或字母。
// 3.@符号是必填项
// 4.右则部分可分为两部分,第一部分为邮件提供商域名地址,第二部分为域名后缀,现已知的最短为2位。
// 最长的为6为。
// 5.邮件提供商域可以包含特殊字符-、_、.
/^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test("wowohoo@qq.com");
可视化

参考
扫一扫在手机端查看
-
Tags : 陕西域名邮箱后缀短号是什么_精通正则表达式
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1