正则表达式特殊字符(正则表达式特殊字符的含义)

本篇文章给大家谈谈正则表达式特殊字符,以及正则表达式特殊字符的含义对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

正则表达式必须包含字母数字和特殊字符

正则表达式要实现必须包含字母数字和特殊字符,那么,我们就必须判断该字符串中:

1. 包含字母

2. 包含数字

3. 包含特殊字符

为了简化问题,这里对特殊字符做下拿薯伏限定,指:_-@=,大家在实际手辩应用中,可以自行扩充这个限定的字符区间。

因此,我们的正则可以写成:

^(?=.*?[a-z])(?=.*?[0-9])(?=.*?[_\-@=])[a-z0-9_\-@=]+$

当然,如果需要限定字符串长度,我们后面的[a-z0-9_\-@=]+可以改为一个长度范围,如6-16:[a-z0-9_\-@=]{6,16}

下面我们来解读一下上面的正则:

正则以^开始,限定匹配字符串是从开始位置进行匹配,(?=.*?[a-z])是肯定型顺序 环视 ,限定当前位置的后面,能匹配.*?[a-z],也就消携是,能够匹配到一个字母,同理,(?=.*?[0-9])表示限定当前位置的后面,能匹配一个数字,(?=.*?[_\-@=])表示限定当前位置的后面,能匹配一个特殊字符,而[a-z0-9_\-@=]+就是前面那些环视限定的位置,即表示[a-z0-9_\-@=]+中,至少匹配一个字母、一个数字、一个特殊字符,最终匹配到达字符串结束位置$。

正则表达式中的常用特殊字符

字符:\ss

1.反斜杠表示下一个首如字符是特殊的

2.反斜杠也可以表示将其后的特殊字符,转义为字面量

字符:^

1. 表示字符串开头要以^后面的字符集合匹配 。匹配输入的开始。

字符:$

1.匹配输入的结束

字符:n*

1.匹配任何   包含零个或多个 n 的字符串。。等价于 {0,}。

字符: n+

1.匹配任何包含至少一个 n 的字符串。。等价于 {1,}。

字符:n?

1.匹配任何   包含零个或一个  n 的字符串。。等价于 {0,1}。

2.如果 紧跟在任何量词 *、 +、? 或 {} 的后面 ,将会使量词变为 非贪婪 的(匹配尽量少的字符),和缺省使用的 贪婪模式 (匹配尽可能多的字符)正好相反。

字符:.

1.表示除换行符之外的单个任何字符

字符:()  ,分组

字符: a | b,     | 或者,匹配a或者b 字符的字符串

字符:(? : x)

1.匹配包含 x (x代表 字符集合, 例如abc) 的字符串

字符:x(?:y)

匹配 x后面紧跟y(y代表 字符集合 ) 的字符串

字符:x(?! y)

匹配 x后面不跟这y(y代表拦迟 字符集合 ) 的字符串

\s : 空格

\S : 非空格

\d : 数字

\D : 非数字

\w : 字符 ( 字母 ,数字,下划线_ )

\W : 非字母、数组、下划线

字符:{n}

1.表示{}前面的字符要出现n次,才能成功匹配字符串

字符{n , m}

1.表示{}前面的字符至少出现n次,最多出现m次,才能成功匹配字符串

字符: [  ] 

1.[] 内是 一个字符 范围。例如   [ abcd ] 等价于= [ a-d]

2.[ ^abc] 里^表示一个字符不再指定范围内。

\n 表示重复的某个子项

\1 重简芹李复的第一个子项

\2 重复的第二个子项

正则表达式特殊符号及用法

Python3 正则表达式特殊符号及用法(详细列表)

正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合、子组匹配、模式重复次数。正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不只是一个字符串。

注1:为了便于理解,难点的地方均用 斜体 举了栗子。

注2:如果你对正则表达式一头雾水或者看不懂下边这个列表,那么小甲鱼极力推荐你先学习这个: Python3 如何优雅地使用正则表达式

字蚂卖符 含义

.                表示匹配除了换行符外的任何字符

                注:通过设置 re.DOTALL 标志可以使 . 匹配任何字符(包含换行符)

A | B,    表示匹配正则表达式 A 或者 B

^                1. (脱字符)匹配输入字符串的开始位置

                2. 如果设置了 re.MULTILINE 标志,^ 也匹配换行符之后的位置

$            1. 匹配输入字符串的结束位置

                2. 如果设置了 re.MULTILINE 标志,$ 也匹配换行符之前的位置

\            1. 将一个普通字符变成特殊字符,例如 \d 表示匹配所有十进制数字

                2. 解除元字符的特殊功能,例如 \. 表示匹配点号本身

                3. 引用序号对应的子组所匹配的字符串

                4. 详见下方列举

[...]            字符类,匹配所包含的任意一个字符

                注1:连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符

                注2:特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。其它特殊字符如 *、+、? 等均作为普通字符匹配

                注3:脱字符 ^ 如果出现在首位则表示匹配不包含其中的任意字符;如果 ^ 出现在字符串中间就仅作为普通字符匹配

{M,N}            M 和 N 均为非负整数,其中 M = N,表示前边的 RE 匹配 M ~ N 次

                    注1:{M,} 表示至少匹配 M 次

                    注2:{,N} 等价于 {0,N}

                    注3:{N} 表示需要匹配 N 次

*                    匹配前面的子表达式零次或多次,等价于 {0,}

+                    匹配前面的子表达式一次或多次,等价于 {1,}

?                    匹配前面的子表达式零次或一次,等价于 {0,1}

                       *?, +?, ??默认情况下 *、+ 和 ? 的匹配模式是贪婪模式(即会尽可能多地匹配符合规则的字符串);*?、+? 和 ?? 表示启用对应的非贪婪模式。

举个栗子:对于字符串 "FishCCC",正则表达式 FishC+ 会匹配整个字符串,而 FishC+? 则匹配 "FishC"。

{M,N}?            同上,启用非贪婪模式,即只匹配 M 次

(...)                匹配圆括号中的正则表达式,或者指定一个子组的开始和结束位置

注:子组的内容可以在匹配之后被 \数字 再次引用 

举个栗子:(\w+) \1 可以字符串 "FishC FishC.com" 中的 "FishC FishC"(注意有空格)

(?...)(? 开头的表示为正则表达式的扩展语法(下边这些是 Python 支持的所有扩展语法)

(?aiLmsux)1. (? 后可以紧跟着 'a','i','L','m','s','u','x' 中的一个或多个字符,只能在正则表达式的开头使用

2. 每一个字符对应一种匹配标志:re-A(只匹配 ASCII 字符),re-I(忽略大小写),re-L(区域设置),re-M(多行模式), re-S(. 匹配任何符号),re-X(详细表达式),包含这些字符将会影响整个正则表达式的规则

3. 当你不想通过 re.compile() 设置正则表达式标志,这种方法就非常有用啦

注意,由于 (?x) 决定正则表达式如何被解析,所以它应该总是被放在最前边(最多允许前边有空白符)。如果 (?x) 的前边是非空白字符,那么 (?x) 就发挥不了作用了。

(?:...)非捕获组,即该子组匹配的字符串无法从后边获取

(?Pname...)命名组,通过组的名字(name)即可访问到子组匹配的字符串

(?P=name)反向引用一个命名组,它匹配指定命名组匹配的任何孙物州内容

(?#...)注释,括号中的内容将被忽略

(?=...)前向肯定断言。如果当前包含的正则表达式(这里以 ... 表示)在当前位置成功匹配,则代表成功,否则失败。一旦该部分正则表达式被匹配引擎尝试过,就不会继续进行匹配则蔽了;剩下的模式在此断言开始的地方继续尝试。

举个栗子:love(?=FishC) 只匹配后边紧跟着 "FishC" 的字符串 "love"

(?!...)前向否定断言。这跟前向肯定断言相反(不匹配则表示成功,匹配表示失败)。

举个栗子:FishC(?!\.com) 只匹配后边不是 ".com" 的字符串 "FishC"

(?=...)后向肯定断言。跟前向肯定断言一样,只是方向相反。

举个栗子:(?=love)FishC 只匹配前边紧跟着 "love" 的字符串 "FishC"

(?!...)后向否定断言。跟前向肯定断言一样,只是方向相反。

举个栗子:(?!FishC)\.com 只匹配前边不是 "FishC" 的字符串 ".com"

(?(id/name)yes-pattern|no-pattern)1. 如果子组的序号或名字存在的话,则尝试 yes-pattern 匹配模式;否则尝试 no-pattern 匹配模式

2. no-pattern 是可选的

举个栗子:()?(\w+@\w+(?:\.\w+)+)(?(1)|$) 是一个匹配邮件格式的正则表达式,可以匹配 和 'user@fishc.com',但是不会匹配 ''

\下边列举了由字符 '\' 和另一个字符组成的特殊含义。注意,'\' + 元字符的组合可以解除元字符的特殊功能

\序号1. 引用序号对应的子组所匹配的字符串,子组的序号从 1 开始计算

2. 如果序号是以 0 开头,或者 3 个数字的长度。那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的 ASCII 码值对应的字符

举个栗子:(.+) \1 会匹配 "FishC FishC" 或 "55 55",但不会匹配 "FishCFishC"(注意,因为子组后边还有一个空格)

\A匹配输入字符串的开始位置

\Z匹配输入字符串的结束位置

\b匹配一个单词边界,单词被定义为 Unidcode 的字母数字或下横线字符

举个栗子:\bFishC\b 会匹配字符串 "love FishC"、FishC." 或 "(FishC)"

\B匹配非单词边界,其实就是与 \b 相反

举个栗子:py\B  会匹配字符串 "python"、"py3"  或 "py2",但不会匹配 "py  "、"py." 或  "py!"

\d1. 对于 Unicode(str 类型)模式:匹配任何一个数字,包括 [0-9] 和其他数字字符;如果开启了 re.ASCII 标志,就只匹配 [0-9]

2. 对于 8 位(bytes 类型)模式:匹配 [0-9] 中任何一个数字

\D匹配任何非 Unicode 的数字,其实就是与 \d 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^0-9]

\s1. 对于 Unicode(str 类型)模式:匹配 Unicode 中的空白字符(包括 [ \t\n\r\f\v] 以及其他空白字符);如果开启了 re.ASCII 标志,就只匹配 [ \t\n\r\f\v]

2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的空白字符,即 [ \t\n\r\f\v]

\S匹配任何非 Unicode 中的空白字符,其实就是与 \s 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^ \t\n\r\f\v]

\w1. 对于 Unicode(str 类型)模式:匹配任何 Unicode 的单词字符,基本上所有语言的字符都可以匹配,当然也包括数字和下横线;如果开启了 re.ASCII 标志,就只匹配 [a-zA-Z0-9_]

2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的字母数字,即 [a-zA-Z0-9_]

\W匹配任何非 Unicode 的单词字符,其实就是与 \w 相反;如果开启了 re.ASCII 标志,则相当于 [^a-zA-Z0-9_]

转义符号正则表达式还支持大部分 Python 字符串的转义符号:\a,\b,\f,\n,\r,\t,\u,\U,\v,\x,\\

注1:\b 通常用于匹配一个单词边界,只有在字符类中才表示“退格”

注2:\u 和 \U 只有在 Unicode 模式下才会被识别

注3:八进制转义(\数字)是有限制的,如果第一个数字是 0,或者如果有 3 个八进制数字,那么就被认为是八进制数;其他情况则被认为是子组引用;至于字符串,八进制转义总是最多只能是 3 个数字的长度

[img]

正则表达式校验是否含有特殊字符

由于特殊字符较多,建议使用白名单谨州进行限制。即,允许输入哪些字符。

1

2

3

var pp = /[^0-9a-zA-Z_]/g; //如,仅允许英差晌派文字母,数字和下划线。此正则匹配非英文字母,数字和下划线。

var b = pp.test("lsafie*sjdf"); //test函数返回虚贺匹配结果。若有非英文字母,数字和下划线,返回true。

alert(b);

JS正则表达式中有哪些特殊字符,这些特殊字

这些符号有:^ $ . * + - ? = ! : | \ / ( ) [ ] { }

1.“[ ]”表示字符类: 即括号里是个字符集:如/[abc]/,表示和含有a,b,c任何一桥裤缺个字母的字符串都匹配。

注:特殊字符类:

\s表示空格符、制表符、Unicode空白符。\S表示非空格空白符。 (也可自定义Unicode字符类:

如:/[\u4E00-\u9FA5]/表示只匹配中文字符。)

\w 任何单字字符,相当于[a-zA-X0-9_];\W与\w相反。

\d 任何数字,相当于[0-9];\D与 \d相反。

\b在字符类中使用表示退格符,[\b]则表示退格直接量;\b可以用来指定匹配位置,即匹配到达单词边界,称为锚;

如:查找一个句子里的单词 java , 可以使用/\bjava\b/;\B与\b相反。

2.“-"表示连字符,如[a-z];

3."."表示除换行符;表示匹配除“\r\n”之外的任意单个字符。若要匹配包括“\r\n”在内的任何字符,请使用像“[\w\W|\d\D|\s\S|]”的模式。

4."^"具有两重含义:开始标记和非,如:/^a/表示以a开始的字符;当在[]中时:/[^a]/表示非a的所有字符。

5."$"表示字符结尾。如:/^abc$/表示以c结束的字符。

6.”{}"表示重复上一项。如/\d{2,4}/表示数字出现至少2次,最多4次。如/3{2,4}/匹配33...;333....;3333.....;不匹配3和4个3相连以上的了。它的三种格式如下{n,m}表示至少3次,最多m次;{n,}至少n次;{n}恰好n次。

7."?"表示{0,1}。

8."+"表示{1,}。

9."*"表示{0,}。

注:非贪婪的重复(如??,+?,*?,{1,5}?只匹配第一个。)

10."|"表示分割,即或的含义。如:/ab|cd|ef/匹配含有ab或cd或ef的字符串。

11."()"包含三重用途:一是定义子表达式。二是在完整的模式中定义子模式。三是子表达式的引用。

子模式的定义可以从目标串中抽取和括号中的子模式相匹配的部分。

子模式的表达式的引用是指:可识别敏辩子模式的编号,提取它。如/(abc)\sis\s(string\w*)/;里纯雀面含有两个字表达式:可通过

\1指(abc);\2指(string\w*); 应用如:/['"][^'"]*['"]/不能取前后同样的引号,可以这样写:/[('")[^'"]*\1]/,可起到约束作用。

注:若想()里的不想被记忆,可采用(?:.....),将不会对其编号。

还有(?=p),(?!p)如下:

如/(javascript)?(?=\:)/ 表示匹配javascript:,但不包含:;它不匹配javascript,因为他有个条件就是后要接:;

(?!p)反前向声明,要求接下来的字符不与模式p匹配,与(?=p)相反。

关于正则表达式特殊字符和正则表达式特殊字符的含义的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表