Skip to content

正则表达式

L edited this page May 8, 2020 · 10 revisions

核心理解

1、通配符: \d \w \s .
2、重复次数: ? + * {}
符合通配符要求的出现的个数
3、进阶1: () |
()表示一个区域内
4、进阶2: (?\d{2,4}) (?.?)
(?.
?) 表示取符合后面通配符+重复次数(.?)的,命名为key
(?.+?)
(?<>) 固定写法
(?.
?) .*会出现贪婪匹配,再加上?,则会取最少,符合要求
比如:
233333 7JhcOr 正则表达式
(?.+?) (?.+?)
.+? 保证不会往下面继续取,跨越id,to,from….取值
5、多条件,或匹配
(匹配1)|(匹配2)|….
比如处理如下格式:1995年1月3日;1995.1.3;1月3日;1-3
(\d{4,4}年\d{1,1}月\d{1,1}日)|(\d{4,4}.\d{1,1}.\d{1,1})|(\d{1,1}月\d{1,1}日)|(\d{1,1}-\d{1,1})
进阶:((A|B))?((C|D|E))….
即A、B两种匹配模式取或,C、D、E取或,AB、CDE再相互关联
6.关键词:正则表达式 断言

符号 名称 作用
?= 正先行断言 后面的内容存在则匹配,匹配(获取)前面的内容
?! 负先行断言 后面的内容不存在(排除)则匹配,匹配(获取)前面的内容
?<= 正后发断言 前面的内容存在则匹配,匹配(获取)后面的内容
?<! 负后发断言 前面的内容不存在(排除)则匹配,匹配(获取)后面的内容

链接:
?=... 正先行断言
?!... 负先行断言
?<= ... 正后发断言
?<!... 负后发断言

常用正则表达式

匹配所有字符包括换行符\n

. 是匹配除过\n之外的全部字符
用[\d\D] 或者[\s\S]匹配所有字符

匹配所有空格、制表符、回车

\s+?

C#示例

1、摘选示例文本
去除\r\n,"等转义字符串
2、将变化部分用正则表达式改写(运用正则表达式测试器)
3、将需要提取的变化部分作命名提取
4、使用提取出的部分(C#部分)

string ToBeRegex = @"m=39536; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, u=130****7736; Domain=uspard.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, rn=%E6%9B%BE%E5%9B%BD%E5%AF%8C; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, lid=60637; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, wx=""""; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, bs=800301%2C800201; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, t=1508417567138; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/, s=4fd514113bde1ce8c10058148cd16d6a; Domain=baidu.com; Expires=Sat, 21-Oct-2017 12:52:47 GMT; Path=/";
//.+?任意字符串
//()表示一个集合,?<name>为值命名
//IgnoreCase表示忽略大小写
Regex regex = new Regex("m=(?<m>.+?);.+?u=(?<u>.+?);",RegexOptions.IgnoreCase);
var matches = regex.Match(ToBeRegex);
if (matches.Success)
{
    string m = matches.Groups["m"].Value;
    string u = matches.Groups["u"].Value;
}

以上是一条消息的处理,如果是多条,采用方法Matches

var matches = regex.Matches(ToBeRegex);
if(matches.Count>0)
{
    foreach(Match match in matches)
    {
        string m = match.Groups["m"].Value;
    }
}

正则表达式生成库(CSharpVerbalExpressions)

Install-Package VerbalExpressions-official
var verbEx = new VerbalExpressions()
		.StartOfLine()
		.Then("http")
		.Maybe("s")
		.Then("://")
		.Maybe("www.")
		.AnythingBut(" ")
		.EndOfLine();
var isCorrect=verbEx.Test(testStr);

正则表达式的测试工具

推荐regextester
在线正则表达式检查

参考资料

learn-regex 中文版

Clone this wiki locally