正则表达式基础知识总结

(作者:杨先金;撰写时间:2019年5月23日)
1、什么是正则表达式:
概念:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
作用:正则表达式主要用来验证、搜索和替换。
2、正则表达式的使用:
(1)、JavaScript中使用正则表达式:
JavaScript中正则表达式的定义如下:
在这里插入图片描述
其中expression即为正则表达式的名称,模式(pattern)可以是任何复杂或简单的正则表达式(但必须是在JavaScript支持范围内的),标志(flags)即用来表明正则表达式行为。
下面介绍JavaScript中支持的三个标志(flags):
g: 表示全局(global)模式,表示pattern会应用于所有字符串,而不是找到一个匹配项后立即停止。
i :表示不区分大小写(ignore)模式。即忽略pattern和字符串的大小写。
m:表示多行(multiple)模式。 即到一行文本末尾时还会继续查找下一行中是否存在匹配的项。
JavaScript中正则表达式的两种主要的方法:
expression.test() :测字符串string,看它是否含有与regexp相匹配的文本。如果 string中含有这样的文本,该方法将返回 true,否则,返回false。
expression.exec() :exec()将检索字符串string,从中得到与正则表达式regexp相匹配的文本。如果exec()找到了匹配的文 本,它就会返回一个结果数组。否则,返回null。
(2)、C#中使用正则表达式:
C#正则表达式使用的类为 System.Text.RegularExpressions.Regex ;常用的方法有以下4个:
测试:Regex.IsMatch(“被测试字符串”, “正则表达式”, “正则表达式选项/模式”);
匹配出第一条结果:Regex.Match(“被匹配字符串”, “正则表达式”, “正则表达式选项/模式”);
匹配出所有结果: Regex.matchs(“被匹配字符串”, “正则表达式”, “正则表达式选项/模式”);
替换:Regex.matchs(“被匹配字符串”, “正则表达式”, “替换字符”, “正则表达式选项/模式”);
2.1、匹配纯文本
正则表达式可以包含纯文本(甚至可以只包含纯文本)。
在这里插入图片描述
2.2、单个匹配
. :匹配除换行符以外的任意字符;
\w:匹配字母或数字、下划线。等价于’[A­Za­z0­9_]’;
\s:匹配任意的空白符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v];
\d:匹配数字,等价于[0­9];
\b:匹配单词的开始或结束;
x|y:匹配 x 或 y;
[xyz]:字符集合,匹配所包含的任意一个字符;
[a­z]:字符范围。匹配指定范围内的任意字符。
注意:在中括号中,特殊代码不会被解释成其它意义。
2.3、反义
\W:匹配任意不是字母、数字和下划线的字符,等价于’[∧A­Za­z0­9_];
\S:匹配任意不是空白符的字符。等价于 [∧\f\n\r\t\v];
\D:匹配任意非数字的字符,等价于[∧0­9];
\B:匹配不是单词开头或结束的位置;
[∧x]:匹配除了x以外的任意字符;
[∧asdfg]:匹配除了asdfg这几个字母以外的任意字符;
[∧a­z]:匹配除了小写字母以外的任意字符;
^:匹配字符串的开始;
$:匹配字符串的结束。
2.4、重复
*:重复零次或更多次,等价于{0,};
+:重复一次或更多次,等价于{1,};
?:重复零次或一次,等价于 {0,1};
{n}:重复n次;
{n,}:重复n次或更多次;
{n,m}:重复n到m次;
2.5、贪婪与懒惰(正则表达式默认是贪婪型的,通常的行为是匹配尽可能多的字符,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的重复元字符都可以被转化为懒惰匹配模式,只要在它后面加 上一个问号 ?)
*?:重复任意次,但尽可能少重复;
+?:重复1次或更多次,但尽可能少重复;
??:重复0次或1次,但尽可能少重复;
{n,m}?:重复n到m次,但尽可能少重复;
{n,}?:重复n次以上,但尽可能少重复;
2.6、字符转义(\)
deerchao.net匹配deerchao.net
c:\windows匹配c:\windows;
2^8匹配2^8(通常这是2的8次方的书写方式);
2.7、分组
用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。
例如匹配IP地址: ((2[0‐4]\d|25[0‐5]|[01]?\d{1,2}).){3}(2[0‐4]\d|25[0-5]|[01]?\d{1,2}) 。
2.8、后向引用
后向引用用于重复搜索前面某个分组匹配的文本。例如,\1 代表分组1匹配的文本。
(exp):匹配exp,并捕获文本到自动命名的组里;
(?exp):匹配exp,并捕获文本到名称为name的组里;
(?:exp):匹配exp,不捕获匹配的文本;
2.9、位置指定和负向位置指定
(?=exp):匹配exp前面的位置(零宽先行断言);
(?<=exp):匹配exp后面的位置(零宽后行断言);
(?!exp):匹配后面跟的不是exp的位置(零宽负向先行断言);
(?<!exp):匹配前面不是exp的位置(零宽负向后行断言);
2.10、注释
(?#comment):这种类型的组不对正则表达式的处理产生任何影响,只是为了提供让人阅读注释。例如:(?:a‐zA‐Z)
2.11、替换
替换就是将表达式匹配到的字符串替换为指定字符串,可以使用 $1、$2 等来引用对应分组的值。
在这里插入图片描述
2.12、运算符优先级
表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。
\:转义符;
(), (??, (?=), []:圆括号和方括号;
*, +, ?, {n}, {n,}, {n,m}:限定符;
^, $, \任何元字符、 任何字符:定位点和序列(即:位置和顺序);
¦:替换,“或"操作,字符具有高于替换运算符的优先级,使得"m¦food"匹配"m"或"food”。若要匹配"mood"或"food",请使用 括号创建子表达式,从而产生"(m¦f)ood"。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值