本篇文章给大家分享的是有关正则表达式的详细介绍,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
元字符使用正则表达式具有处理能力。元字符既可以是放在[ ] 中的任意单个字符(如 [a]表示匹配单个小写字符 a),也可以是字符序列(如 [a-d] 表示匹配 a 、b、 c、 d 之间的任意一个字符,而 \w 表示任意英文字母和数字及下划线),常见的元字符如下:
| 字符 | 描述 | 特别说明 |
|---|---|---|
. | 匹配除换行符(\n)以外的任意字符 | ~ |
[abcde] | 匹配 a b c d e 之中的任意一个字符 | 所有字符是 或 的关系 |
[a-h] | 匹配 a到h之间的任意一个字符 | ~ |
[^fgh] | 不与 fgh之中的任意一个字符匹配 | 在 中括号[ ] 的第一个字符前加上 ^ 表示 取反不匹配中括号里面出现的任意字符 |
\w | 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于[a-zA-Z0-9_] | ~ |
\W | 与 \w 相反,相当于 [^a-zA-Z0-9_] | ~ |
\s | 匹配任意的空白符,相当于 [\f\n\r\t\v] | ~ |
\S | 与 \s相反,相当于 [^\s] | ~ |
\d | 匹配任何 0 到 9 之间的单个数字,相当于 [0-9] | ~ |
\D | 与 \d 相反,相当于[^0-9] | ~ |
[\u4e00-\u9fa5] | 匹配任意单个汉字(中文)(这里用的是 Unicode 编码表示的汉字) | ~ |
\b | 匹配单词的开始或结束 | ~ |
^ | 匹配字符串的开始 | 放在中括号的第一个字符前 则变为 取反的意思 |
$ | 匹配字符串的结束 | ~ |
作用:限定这个符号前面 一个 单元 多出现的次数
单元:
- 如果前面出现的是一个字符的话,则这一个字符就为一个 单元
- 如果前面我们用小括号把一个很长的字符串括起来的话,那么整个小括号里面都算是一个 单元
上面的元字符都是针对单个字符匹配的,要想同时匹配多个字符的话,还需要借助限定符,下面是一些常见的限定符(下表中 n 和 m 都是表示 整数。)
| 字符 | 描述 | 特别说明 |
|---|---|---|
* | 匹配 0 到 多 个元字符,相当于 {0,} | ~ |
? | 匹配 0 到 1 个元字符, 相当于 {0,1} | ~ |
+ | 匹配至少 1 个元字符,相当于 {1,} | ~ |
{n} | 匹配 n 个元字符 | ~ |
{n,} | 匹配至少 n 个元字符 | ~ |
{n,m} | 匹配 n 到 m 个元字符 | ~ |
\b | 匹配单词边界 | ~ |
^ | 字符串必须以指定的字符开始 | ~ |
$ | 字符串必须以指定的字符结束 | ~ |
- 可以将多个元字符或者原义文本字符用括号括起来形成一个
分组,比如^(13)[4-9]\d{8}$表示任意以 13 开头的移动手机号码。abcabcabc+表示 最后的字母c出现 1 次或 多次;(abcabcabc)+表示 整个字符串abcabcabc出现 1 次或 多次。
- 可以使用
|来表示或的关系,例如z|j|q表示匹配z 、j、q之中的任意一个字母。其实等价于[zjq]。ab|cd|ef表示的是:要么是ab、要么是cd要么是ef。a(b|cd|e)f表示的是:以a开头,要么是b、要么是cd要么是e,最后以f结尾。- 总结:
|(或) 的唯一边界是 小括号(( ))
[0-9A-Z.?]这个正则你如何理解?- 当
.和?出现在中括号中时,.和?将变为 普通字符,它就是 点 和 问号。你可以理解为[ ]的优先级要大于. 和 ?的优先级。 - 此正则表达式将会完全匹配字符串
?aaa.bbb,记住这里. 和 ?被完全当做了普通字符。
- 当
多选结构其实就是元字符 | (或)的使用。
界定范围:开头、结尾、小括号
| 正则 | 含义 |
|---|---|
Windows98|Windows2000|WindowsXP | 匹配Windows98或者Windows2000或者WindowsXP |
^Windows98|Windows2000|WindowsXP$ | 以Windows98开头或者包含Windows2000或者以WindowsXP结尾注意 ^和$都包含在|的范围内,因为|的界限只有:开头、结尾、小括号 |
Windows(98|2000|XP) | Windows然后98 或者2000或者XP |
总结:多选结构可以包括很多字符,但不能超越 括号 的界限。
- 我们已经了解怎么重复单个字符;
- 但如果想要重复一个字符串该怎么办?你 可以用小括号来指定子表达式(也叫做分组)。
(\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?)
- 使用小括号指定一个子表达式(分组)后,匹配这个子表达式的文本可以被捕获,从而在表达式或其他程序中作进一步的处理。
- 默认情况下,每个分组会自动拥有一个组号,规则是:以分组的
左括号为标志,从左向右,第一个分组的组号为 1 ,第二个为 2 ,依次类推。
示例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词- 匹配诸如:
where where go, tom tom happy
直白解释:
正则表达式中,前面用小括号进行划分(分组),后面把小括号匹配到的内容引用到后面来,分别用\1、\2等 来表示。(第一个小括号极\1...)。如果存在 小括号嵌套小括号的情况 (\w+(.?)) 记住:这个时候要以 ( 为标志 从左往右 数小括号就可以了。
- 环视不匹配任何字符,只匹配文本中的 特定位置。类似于
\b、^、$那样。环视不会占用字符。 - 环视分为顺序和逆序两种:
- 顺序
(?=exp)位置的后面能匹配exp。例如:(?=\d)当前位置右边是数字。(?!exp)位置的后面不能匹配exp。例如:(?!\d)当前位置右边不是数字。
- 逆序
(?<=exp)位置的前面能匹配exp。例如:(?<=\d)当前位置左边是数字(? 位置的前面不能匹配exp。例如:(?!\d)当前位置左边不是数字。
- 顺序
- 当正则表达式中包含能接受重复的 量词 (指定数量的代码,例如:
+、*、{3,12}等)时, 通常的行为是匹配尽可能多的字符。 - 正则表达式:
a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab,这被称为 -------贪婪匹配 - -
- 我们更需要 懒惰匹配,也就是匹配尽可能少的字符,前面给出的量词都可以被转化为 懒惰匹配模式, 只要在它后面加一个问号
?。这样.*?就意味着匹配任意数量的重复,但是在能使整个 匹配成功的前提下使用最少的重复。 a.*?b匹配最短的,以a开始, 以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。
总结:
高级5 - 模式匹配的优先级贪婪与懒惰模式之间的区别就在于:懒惰模式 在量词
*的后面多了一个 问号?。
在使用正则表达式时,需要注意匹配的顺序。通常相同优先级 从左到右 进行计算,不同优先级的运算 先高后低。各种操作符的匹配顺序优先级 从高到低 如下表所示。
| 顺序 | 元字符 | 描述 |
|---|---|---|
| 1 | \ | 转义字符 |
| 2 | ()、(?:)、(?=)、[] | 模式单元和原子表 |
| 3 | *、+、?、{n}、{n,}、{n,m} | 重复匹配 |
| 4 | ^、$、\b、\B、\A、\Z | 边界限制 |
| 5 | | | 模式选择 |
1问:要匹配字符串 333333\$33\33333 中的 \$ 正则应该怎么写?
2问:如果在 PHP 中 preg_match 函数分别用单引号和双引号的表达式来匹配上面的 \$,怎么写?
答案:
- 表达式需要的规则是
\\\$ - 用单引号表示上面的字符串
'/\\\\\\$/'。(为方便查看我们拆分一下为'/\\ \\ \\ $/') - 用双引号表示上面的字符串
"/\\\\\\\$/"。(为方便查看我们拆分一下为"/\\ \\ \\ \$/") - 问什么呢?
再答:
- PHP 中单引号不转义任何字符,但是唯独转义
\,所以我们需要 6个\来生成表达式。 双引号除了转义
\以外,还需要多一个\用来转义$所以它 需要 7 个\。
以上就是正则表达式的详细介绍,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
新闻名称:正则表达式的详细介绍-创新互联
标题链接:http://www.cqwzjz.cn/article/spjhh.html


咨询
建站咨询
