正则表达式

39 阅读3分钟

用来匹配某类文本或网页

在线测试工具

c.runoob.com/front-end/8…

匹配模式

选项+字符或分组+次数

字符[]

[]符号表示必须出现符合条件的一个字符,里面可包含多个字符,他们之间是或的关系。如[\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对匹配结果扩展