-
Notifications
You must be signed in to change notification settings - Fork 22
正则表达式
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+?
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
在线正则表达式检查