用来匹配某类文本或网页
在线测试工具
匹配模式
选项+字符或分组+次数
字符[]
[]符号表示必须出现符合条件的一个字符,里面可包含多个字符,他们之间是或的关系。如[\dab]表示匹配a或b或数字
| ^ | 表示非,即不能是某范围内的字符,如[^0-9]]表示非数字。[^djt]表示除这桑、3个字符外的字符 |
|---|---|
| [0-9]或\d | 十进制数字 |
| [^0-9]或\D | 非十进制数字 |
| [a-zA-Z] | 所有英文字母 |
| [\u4e00-\u9fa5] | 汉字,汉字的unicode编码是4e00-9fa5(16进制) |
| \w | 单词字符 字母、数字、下划线 |
| \W | 非单词字符 |
| \s | 表示空白(空格 \t \r \n) |
| \S | 表示非空白 |
| (点). | 除换行符\n外的任意单个字符(包括汉字) |
| (空格) | 手敲一个空格代表匹配空格 |
| 特殊字符 | 17个,如果要匹配这几个字符本身,需要加转义^ + ? * $ \ { } [ ] ( ) ! ' " . , |
选项
(?选项),如(?i)表示忽略大小写
| I | 忽略大小写 |
|---|---|
| S | 让点(.)可以匹配换行符 |
| M | 多行匹配 |
| n | 单行模式,可以匹配换行符,用于全文匹配 |
量词
匹配规则
贪婪匹配:匹配规则默认为贪婪匹配,比如匹配2-4次,会尽量匹配4次
懒惰匹配:尽可能少的匹配。+? *? ??
| {2,4} | 表示2-4次 |
|---|---|
| {2,} | 2到多次 |
| {2} | 2次 |
| + | 1到多次 |
| * | 0到多次 |
| ? | 0或1次 |
边界
边界符号本身不会和任何字符匹配
| ^....$ | 从头到尾匹配 |
|---|---|
| ^ | 字符串的左边界。多行匹配模式下表示一行文字的左边界 |
| $ | 字符串的右边界。多行匹配模式下表示一行文字的右边界 |
| \A | 字符串的左边界 |
| \Z | 字符串的右边界 |
| \b | 单词边界,(后面或前面不是单词,是逗号、空格等)。注意\b是转义字符(Backspace,代表一个字符),正则表达式中要写成\b |
| \B | 非单词边界 |
分组
圆括号括起来的就是一个分组(或称模式单元),圆括号本身不会匹配任何东西。分组后可以找到指定分组的内容,分组作为一个整体,后面可以跟量词;可以对分组命名
| 分组编号 | 按照左边开始第一个左括号为分组1这样的规则编号(分组有嵌套时依然适应) |
|---|---|
| 分组命名 | (?<名称>...) |
| 非获取匹配 | (?: ...),匹配但部获取匹配结果 |
简写 \2 表示第二个分组的子串,需要说明\不是转义字符
得到分组内容
$1
$0 匹配全部分组
${分组名}
模式选择符
或者|
A|B表示匹配到A或B(每部分可以是字符、字符串),短路匹配
作用范围
分组中,仅分组内
分组外,整个正则表达式开头或结尾或另一个 |
示例
//匹配网页中的标签(分组中是我们想要的信息)
<a target="_blank" title=(.*)" herf=".*" onmousedown=".*">
//匹配网页中文字(标签含换行符)
<div class='e1'>.*?<span class="t3">(.*?)</span>
//匹配网页中图片地址(前面要加http://才能被识别)
<img width="220" height="220" data-img="1" .*="//(.*?)">
//匹配多个电话号码,
\d{4}-\d{7}|\d{3}-\d{8}
//匹配电话号码
\d{4}-\d{7}
//匹配QQ号
\d{5,13}
//匹配网址
[a-zA-Z]+://[^\s]*(?:.com|.cn|.me|.org)
//任意长度不为0的字符串(不含\n)
.+
//任意长度的字符串,包括空串(不含\n)
.*
//判断含有长度大于2的公共子串
//(.{3,})表示长度在3及以上的作为一个分组,.*表示中间可以有任意长度字符串,\1表示第一个分组又出现过
string pattern = @"(.{3,}).*\1";
if(Regex.IsMatch(str, pattern)) return false;
使用
string pattern = @"^[ADWS]\d{1,2}$";
Regex.IsMatch(str, pattern)
相关类
System.Text.RegularExpressions
Regex类
Regular Expression(正则表达式),对象建议命名为re
静态方法
| 方法名 | 说明 |
|---|---|
| IsMatch | 判断字符串是否符合某种匹配模式 |
方法
| 方法名 | 说明 |
|---|---|
| IsMatch | 判断字符串是否符合某匹配模式 |
| Match | 返回包含第一个匹配项的信息的Match对象 |
| NextMatch | 得到下一个匹配Match对象,要结合Match方法使用 |
| Matches | 得到匹配的Match对象的集合,MatchCollection对象 |
| Replace | 将与匹配模式符合的字符串替换掉 |
MatchCollection类
Capture类
| 属性名 | 说明 |
|---|---|
| Index | 子串起始位置 |
| Value | 子串内容 |
| Length | 子串长度 |
Group类
Match类
| 方法 | 说明 |
|---|---|
| Groups | 得到匹配的分组的集合 |
| Result | 对匹配结果扩展 |