正则表达式书写规则说明

lsdb lsdb     2023-01-09     766

关键词:

一、说明

我曾经看过无数的正则表达式文章,然而每当我再次需要书写仍然感觉无从下手,一如既往需要百度“IP正则表达式”、“URL正则表达式”。

反思这种现像的原因,一是很多文章都是授之以鱼的比如直接告诉你URL的正则表达式是“[a-zA-z]+://[^s]*”,而且同一个表达式(比如都是URL正则表达式)不同的文章给出的经常是不一样的(其原因一是有的考滤比较全有的考滤没有那么全二是正则表达式确实就是有很多等价写法)。这没法记。

二是授之以渔的教程大多都只是把官方文档搬过来,大而全没突出关键点,这也没法记。

 

二、正则书写关键点

正则书写的关键点只有三个:一是所有基础表达式默认都能且只能匹配一个字符,二是除非其后给出限定符另外指出匹配次数,三是限定符只限定在其前面的那一个表达式(^定位符只对其后一个表达式生效,$定位符只对其前一个表达式生效)。

 

2.1 基础表达式

可打印字符基础表达式:

基础表达式 说明
a 单个字符。a这里只是个代表,可以是任意非特殊字符
a|b 匹配a或b。a和b只是个代表,a和b可以是任意非特殊字符
[abc] 匹配a或b或c。a、b和c只是个代表,a、b和c可以是任意非特殊字符
[^abc] 匹配不是a或b或c以外的所有字符。
[a-z] 匹配a到z的任意一个字符
d 匹配一个数字字符。等价于 [0-9]。
D 匹配一个非数字字符。等价于 [^0-9]。
w 匹配字母、数字、下划线。等价于‘[A-Za-z0-9_]‘。
W 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]‘。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]
S 匹配任何非空白字符。等价于 [^ f v]。

 

 

 

 

 

 

 

 

 

非打印字符基础表达式:

基础表达式 说明
cx 匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c‘ 字符。
f 匹配一个换页符。等价于 x0c 和 cL。
匹配一个换行符。等价于 x0a 和 cJ。
匹配一个回车符。等价于 x0d 和 cM。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。注意 Unicode 正则表达式会匹配全角空格符。
S 匹配任何非空白字符。等价于 [^ f v]。
匹配一个制表符。等价于 x09 和 cI。
v 匹配一个垂直制表符。等价于 x0b 和 cK。

 

 

 

 

 

 

 

特殊字符基础表达式(特殊字符是指正则中用他来做别的功能他不能是他自己的字符):

特殊字符 特殊字符基础表达式
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘ ‘ 或 ‘ ‘。要匹配 $ 字符本身,请使用 $。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
. 匹配除换行符 之外的任何单字符。要匹配 . ,请使用 . 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 [。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n‘ 匹配字符 ‘n‘。‘ ‘ 匹配换行符。序列 ‘\‘ 匹配 "",而 ‘(‘ 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。
标记限定符表达式的开始。要匹配 ,请使用 。
| 指明两项之间的一个选择。要匹配 |,请使用 |。

 

 

 

 

 

 

 

 

 

 

2.2 限定符

限定符 说明
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于0,。
+ 匹配前面的子表达式一次或多次。例如,‘zo+‘ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 1,。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 0,1。
n n 是一个非负整数。匹配确定的 n 次。例如,‘o2‘ 不能匹配 "Bob" 中的 ‘o‘,但是能匹配 "food" 中的两个 o。
n, n 是一个非负整数。至少匹配n 次。例如,‘o2,‘ 不能匹配 "Bob" 中的 ‘o‘,但能匹配 "foooood" 中的所有 o。‘o1,‘ 等价于 ‘o+‘。‘o0,‘ 则等价于 ‘o*‘。
n,m m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o1,3" 将匹配 "fooooood" 中的前三个 o。‘o0,1‘ 等价于 ‘o?‘。请注意在逗号和两个数之间不能有空格。

 

 

 

 

 

 

三、正则表达式示例说明

理解别人的正则表式比自己写正则表达式更能代表对表代式的掌握程度,我们以这个网站生成的几个表达式进行解析。抓住上面说的三大关键点基本都能够理解。

 

3.1 URL正则表达式

表达式:[a-zA-z]+://[^s]*

[a-zA-z]+----[a-zA-z]是一个基础表达式,意思是匹配任意小写或大写字母(A-z的z应该是错的应该大写才是其本意)。+是其限定符,所以他不再是只能匹配一次而是一次或多次。

://----这是三个基础表达式(:和/和/),由于他们都没有限定符,所以他们各自都能且只能匹配一次。

[^s]*----[^s]是一个基础表达式表示所有非空白字符。*是其限定符,所以他不再是只能匹配一次而是可以是任意次。

总的来看这个表达式是一个很不严谨的URL表达式。

 

3.2 身份证正则表达式

表达式:^(d6)(d4)(d2)(d2)(d3)([0-9]|X)$

^(d6)----^表示(d6)在开头匹配,d表示数字,6表示d要且只要匹配6次。(省市县)

(d4)----d表示数字,4表示d要且只要匹配4次。(年)

(d2)----d表示数字,2表示d要且只要匹配2次。(月)

(d2)----d表示数字,2表示d要且只要匹配2次。(日)

(d3)----d表示数字,3表示d要且只要匹配3次。(编号)

([0-9]|X)$----$表示([0-9]|X)在末尾匹配,没有限定符所以([0-9]|X)能且只能匹配一个字符,该字符要么是0到9中的一个要么是字母“X”。(校验码)

 

四、正则在线生成及测试式具

站长之家:http://tool.chinaz.com/regex/

菜鸟教程:https://c.runoob.com/front-end/854

开源中国:http://tool.oschina.net/regex/#

 

参考:

http://www.runoob.com/regexp/regexp-syntax.html

正则表达式

...某个规则书写规范:用符号来描述书写规则:/中间写正则表达式/^:匹配开头,$:匹配结尾;/^ve/以ve开头的/ve$/以ve结尾用到的函数:d:一个任意的数字w:一个任意的数字或字母s:一个任意的字符串{n}:把左边的表达式重复n遍{... 查看详情

39.正则表达式

正则表达式:符合一定规则的表达式作用:用于专门操作字符串特点:用一些特定的符号来表示一些代码操作,简化书写好处:简化对字符串的复杂操作弊端:符号定义越多,正则越长,阅读性越差。具体操作功能:1.匹配:Stri... 查看详情

正则表达式

 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 书写规则   /^&nbs... 查看详情

正则表达式的语法和使用说明

正则表达式,又称规则表达式。(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式... 查看详情

正则表达式

正则表达式匹配某个字符串符合某个规则 1z1  1111,a1d+,wd   /^[0-9|A-z|_]{1,17}[@][0-9|A-z]{1,3}.(com)$//^d[a-z]{10}d$/ 用符号来描述书写规则:/中间写正则表达式/^:匹配开头,$:匹配结尾;/^ve/以ve开头的/ve$/以ve结尾... 查看详情

正则表达式

其实是用来操作字符串的一些规则。好处:正则的出现,对字符串的复杂操作变得更为简单。特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化... 查看详情

01_正则表达式_01_匹配

【正则表达式简述】含义:符合一定规则的表达式作用:专门用于操作字符串特点:用一些特殊的符号来表示一些代码的操作,这样可以简化书写。学习正则表达式就是学习一些特殊符号的使用。有点:极大简化了对字符串的复... 查看详情

常用正则表达式—想说爱你不容易

到底什么是正则表达式?在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。常用元字符代码说明.匹... 查看详情

yii2.0rules验证规则

...'字段名'],'match','pattern'=>'/正则表达式/','message'=>'提示信息'];[['字段名'],'match','not'=>ture,'pattern'=>'/正则表达式/','message'=>'提示... 查看详情

yii2.0rules验证规则

...'字段名'],'match','pattern'=>'/正则表达式/','message'=>'提示信息'];[['字段名'],'match','not'=>ture,'pattern'=>'/正则表达式/','message'=>'提示... 查看详情

正则表达式

1.正则表达式规则1.1普通字符  字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。      举例1:表达式"c",在匹配字符串"abcde"时,匹配结果是:成功;匹配到的内容... 查看详情

正则表达式事件调用

正则表达式可解决的问题表单验证:<form></form> 表单 去空验证,对比验证;范围验证;固定格式验证; 正则表达式书写规则:       /中间写表达式 /例:  身份证验证: ... 查看详情

正则表达式

最近学了下正则表达式,感觉有必要做下记录,方便在以后使用的时候查阅,特别说明:本文的内容均来自www.runoob.com,测试使用了http://tool.oschina.net/regex/个人看来,正则表达式的学习主要是掌握一些规则,需要注意的是要和shel... 查看详情

正则表达式和re模块

正则表达式和re模块1、正则表达式(1)定义:匹配字符串内容的一种规则。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符... 查看详情

正则表达式

1、正则表达式用符号来描述书写规则:/中间写正则表达式/^:匹配开头,$:匹配结尾;/^ve/以ve开头的/ve$/以ve结尾d:一个任意的数字w:一个任意的数字或字母s:一个任意的字符串{n}:把左边的表达式重复n遍{m,n}:把左边的表达... 查看详情

grepegrep命令用法

何谓正则表达式正则表达式,又称正规表示法、常规表示法(RegularExpression,在代码中常简写为regex、regexp或RE),是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。正则表达式使用单个字... 查看详情

c#中不同格式数据校验的正则表达式

网上经常看到用正则表达式校验数据的文章,有的虽然总结得很全,但是大多数都没有经过严格验证,错误较多。本文包含三十余条不同格式数据校验的C#正则表达式,一般均附有说明,且在VisualStudio里面跑过。 正则表达式... 查看详情

java中身份*号正则表达式

...学员在测试的时候对于java编写的程序中身份*号码的正则表达式不太清楚,我们在此专门写一篇博文说明一下。首先要明白身份*号码的编码规则,然后根据编码规则去写正则表达式:18位身份*号编码规则如下:第1位和第2位:省... 查看详情