正規表示式的本質是使用一系列特殊字元模式,來表示某一類字串。正規表示式無疑是處理文字最有力的工具,而.NET的System.dll類別庫所提供的System.Text.RegularExpressions.Regex類別實作了驗證正規表示式的方法。 Regex 類別表示不可變(唯讀)的正規表示式。它還包含各種靜態方法,允許在不明確創建其他類別的實例的情況下使用其他正規表示式類別。
正規表示式的字元代表的說明:
說明 |
|
#\ |
轉義字符,將一個具有特殊功能的字元轉義為一個普通字符,或反過來 |
^ |
符合輸入字串的開始位置 |
$ |
符合輸入字串的結束位置 |
* |
#匹配前面的零次或多次的子表達式 |
#+ |
匹配前面的一次或多次的子表達式 |
? |
#匹配前面的零次或一次的子表達式 |
{n} |
#n是一個非負整數,符合前面的n的次子表達式式 |
{n,} |
#n是非負整數,至少符合前面的n的次子表達式 |
{n,m} |
#m和n均為非負整數,其中n |
? |
當該字元緊接在其他限制當符(*,+,?,{n},{n,},{n,m})後面時,匹配模式盡可能少的匹配所搜尋的字串 |
. |
匹配除”\n」之外的任何單一字元 |
##( pattern) | 符合pattern並取得此符合 |
(?:pattern) | 符合pattern但不取得符合結果 |
#(?=pattern) | 正向預查,在任何符合pattern的字串開始處符合尋找字串 |
#(?!pattern) | 負向預查,在任何不符合pattern的字串開始處符合尋找字串 |
x|y | 匹配x或y。例如,’z|food’能匹配”z”或”food”。 '(z|f)ood' 則符合'zood'或'food' |
[xyz] | 字元集合。匹配所包含的任意一個字元。例如:'[abc]'可以匹配”plain”中的'a' |
[^xyz] | 負值字元集合。匹配為包含的任意字元。例如:'[^abc]'可以匹配”plain”中的'p' |
[a-z] | 符合指定範圍內的任意字元。例如:'[a-z]'可以匹配'a'到'z'範圍內的任意小寫字母字元 |
[^a-z] | 符合不在指定範圍內的任意字元。例如:'[^b-z]'可以匹配不在b~z內的任意字元 |
\b | 匹配一個單字邊界,指單字和空格間的位置 |
\B | 符合非單字邊界 |
\d | 符合一個數字字元,等價於[0-9] |
#\D | 符合一個非數字字元,等價於[^0-9] |
\f | 符合一個換頁符號 |
\n | 匹配一個換行符 |
\r | #對一個回車符 |
\s | 符合任何空白符,包括空格、製表符、換頁符等 |
\S | #符合任何非空白字元 |
\t |
符合一個製表符 |
\v |
匹配一個垂直製表符,等價於\x0b和\cK |
\w |
符合包含下劃線的任何單字字元。等價於'[A-Za-z0-9_]' |
#\W |
匹配任何非單字字符,等價於'[^A-Za-z0-9_]' |
注意:
由于在正则表达式中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ {
”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如希望在字符串中至少有一个“ \
”,那么正则表达式应该这么写: "\\+"
Regex类常用的方法
1、静态Match方法
使用静态Match方法,可以得到源中第一个匹配模式的连续子串。
静态的Match方法有2个重载,分别是:
Regex.Match(string input, string pattern); //第一种重载的参数表示:输入、模式 Regex.Match(string input, string pattern, RegexOptions options); //第二种重载的参数表示:输入、模式、RegexOptions枚举的“按位或”组合。
RegexOptions枚举的有效值是:
1、None:指定不设置选项。表示无设置,此枚举项没有意义
2、IgnoreCase:指定不区分大小写的匹配。
3、Multiline:多行模式。更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。表示多行模式,改变元字符^和$的含义,它们可以匹配行的开头和结尾
4、ExplicitCapture:指定有效的捕获仅为形式为 (?
5、Compiled:指定将正则表达式编译为程序集。这会产生更快的执行速度,但会增加启动时间。在调用
System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName)方法时,不应将此值分配给
System.Text.RegularExpressions.RegexCompilationInfo.Options属性。
6、Singleline :指定单行模式。更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配)。表示单行模式,改变元字符.的意义,它可以匹配换行符
7、IgnorePatternWhitespace:
消除模式中的非转义空白并启用由 #
标记的注释。但是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace值不会影响或消除字符类中的空白。表示去掉模式中的非转义空白,并启用由#标记的注释
8、RightToLeft:指定搜索从右向左而不是从左向右进行。表示从右向左扫描、匹配,这时,静态的Match方法返回从右向左的第一个匹配
9、ECMAScript:
为表达式启用符合 ECMAScript 的行为。该值只能与
System.Text.RegularExpressions.RegexOptions.IgnoreCase、System.Text.RegularExpressions.RegexOptions.Multiline和
System.Text.RegularExpressions.RegexOptions.Compiled
值一起使用。该值与其他任何值一起使用均将导致异常。表示符合ECMAScript,这个值只能和IgnoreCase、Multiline、Complied连用
10、CultureInvariant: 指定忽略语言中的区域性差异 RegularExpressions Namespace。表示不考虑文化背景
注意:Multiline在没有ECMAScript的情况下,可以和Singleline连用。Singleline和Multiline不互斥,但是和ECMAScript互斥。
2、静态的Matches方法
这个方法的重载形式同静态的Match方法,返回一个MatchCollection,表示输入中,匹配模式的匹配的集合。
3、静态的IsMatch方法
此方法返回一个bool,重载形式同静态的Matches,若输入中匹配模式,返回true,否则返回false。
可以理解为:IsMatch方法,返回Matches方法返回的集合是否为空。
Regex类常用的方法的例子:
1、字符串替换:
//例如我想把如下格式记录中的NAME值修改为YONG string line = "ADDR=5449919;NAME=LINJIE;PHONE=45859"; Regex reg = new Regex("NAME=(.+);"); string modifiedStr = reg.Replace(line, "NAME=YONG;");
2、字符串匹配:
string line = "ADDR=5449919;NAME=LINJIE;PHONE=45859"; Regex reg = new Regex("NAME=(.+);"); //例如我想提取line中的NAME值 Match match = reg.Match(line); string value = match.Groups[1].Value; Console.WriteLine("value的值为:{0}", value);
3、Match方法的实例
//文本中含有"speed=68.9mph",需要提取该速度值,但是速度的单位可能是公制也可能是英制,mph,km/h,m/s都有可能;另外前后可能有空格。 string line = "lane=5;speed=68.9mph;acceleration=3.6mph/s"; Regex reg = new Regex(@"speed\s*=\s*([\d\.]+)\s*(mph|km/h|m/s)*"); Match match = reg.Match(line); //那么在返回的结果中match.Groups[1].Value将含有数值,而match.Groups[2].Value将含有单位。 var value = match.Groups[1].Value; var unit = match.Groups[2].Value; Console.WriteLine("speed的值为:{0} speed的单位是:{1}", value, unit);
4、解码gps的GPRMC字符串
//就可以获得经度、纬度值 Regex reg = new Regex(@"^\$GPRMC,[\d\.]*,[A|V],(-?[0-9]*\.?[0-9]+),([NS]*),(-?[0-9]*\.?[0-9]+),([EW]*),.*");
5、提取[]里面的值
string pattern = @"(?is)(?
6、提取()里面的值
string pattern= @"(?is)(?
7、提取{}里面的值
string pattern = @"(?is)(?
System.Text.RegularExpressions命名空间的说明
该名称空间包括8个类,1个枚举,1个委托。他们分别是:
Capture: 包含一次匹配的结果;
CaptureCollection: Capture的序列;
Group: 一次组记录的结果,由Capture继承而来;
GroupCollection:表示捕获组的集合
Match: 一次表达式的匹配结果,由Group继承而来;
MatchCollection: Match的一个序列;
MatchEvaluator: 执行替换操作时使用的委托;
RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息
RegexOptions 提供用于设置正则表达式的枚举值
Regex类中还包含一些静态的方法:
Escape: 对字符串中的regex中的转义符进行转义;
IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值;
Match: 返回Match的实例;
Matches: 返回一系列的Match的方法;
Replace: 用替换字符串替换匹配的表达式;
Split: 返回一系列由表达式决定的字符串;
Unescape:不对字符串中的转义字符转义。
常用的正则表达式:
1、数字验证的表达式:
//数字 Regex reg = new Regex(@"^[0-9]*$"); //n位的数字 Regex reg = new Regex(@"^\d{n}$"); //至少n位的数字 Regex reg = new Regex(@"^\d{n,}$"); //m-n位的数字 Regex reg = new Regex(@"^\d{m,n}$"); //零和非零开头的数字 Regex reg = new Regex(@"^(0|[1-9][0-9]*)$"); //非零开头的最多带两位小数的数字 Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$"); //带1-2位小数的正数或负数 Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$"); //正数、负数、和小数 Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$"); //有两位小数的正实数 Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$"); //有1~3位小数的正实数 Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$"); //非零的正整数 Regex reg = new Regex(@"^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$"); //非零的负整数 Regex reg = new Regex(@"^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$"); //非负整数 Regex reg = new Regex(@"^\d+$ 或 ^[1-9]\d*|0$"); //非正整数 Regex reg = new Regex(@"^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$"); //非负浮点数 Regex reg = new Regex(@"^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$"); //非正浮点数 Regex reg = new Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$"); //正浮点数 Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"); //负浮点数 Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"); //浮点数 Regex reg = new Regex(@"^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");
2、字符验证常用正式表达式:
//汉字 Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$"); //英文和数字 Regex reg = new Regex(@"^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$"); //长度为3-20的所有字符 Regex reg = new Regex(@"^.{3,20}$"); //由26个英文字母组成的字符串 Regex reg = new Regex(@"^[A-Za-z]+$"); //由26个大写英文字母组成的字符串 Regex reg = new Regex(@"^[A-Z]+$"); //由26个小写英文字母组成的字符串 Regex reg = new Regex(@"^[a-z]+$"); //由数字和26个英文字母组成的字符串 Regex reg = new Regex(@"^[A-Za-z0-9]+$"); //由数字、26个英文字母或者下划线组成的字符串 Regex reg = new Regex(@"^\w+$ 或 ^\w{3,20}$"); //中文、英文、数字包括下划线 Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$"); //中文、英文、数字但不包括下划线等符号 Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$"); //可以输入含有^%&’,;=?$\”等字符 Regex reg = new Regex(@"[^%&’,;=?$\x22]+"); //禁止输入含有~的字符 Regex reg = new Regex(@"[^~\x22]+");
3、一些特殊的正则表达式:
//Email地址 Regex reg = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); //域名 Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?"); //InternetURL Regex reg = new Regex(@"[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"); //手机号码 Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$"); //电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX) Regex reg = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$"); //国内电话号码(0511-4405222、021-87888822) Regex reg = new Regex(@"\d{3}-\d{8}|\d{4}-\d{7}"); //身份证号(15位、18位数字) Regex reg = new Regex(@"^\d{15}|\d{18}$"); //短身份证号码(数字、字母x结尾) Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$"); //帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线) Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$"); //密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线) Regex reg = new Regex(@"^[a-zA-Z]\w{5,17}$"); //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间) Regex reg = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"); //日期格式 Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}"); //一年的12个月(01~09和1~12) Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$"); //一个月的31天(01~09和1~31) Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$"); //钱的输入格式: //有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000” Regex reg = new Regex(@"^[1-9][0-9]*$"); //这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式 Regex reg = new Regex(@"^(0|[1-9][0-9]*)$"); //一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号 Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$"); //这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分 Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$"); //必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的 Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$"); //这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样 Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$"); //这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样 Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$"); //1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须 Regex reg = new Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$"); //备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里 //xml文件 Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$"); //中文字符的正则表达式 Regex reg = new Regex(@"[\u4e00-\u9fa5]"); //双字节字符 Regex reg = new Regex(@"[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))"); //空白行的正则表达式,可用来删除空白行 Regex reg = new Regex(@"\n\s*\r"); //HTML标记的正则表达式 Regex reg = new Regex(@"]*>.*?\1>|<.></.>");// (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力) //首尾空白字符的正则表达式 Regex reg = new Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");// (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式) //腾讯QQ号 Regex reg = new Regex(@"[1-9][0-9]{4,}"); //(腾讯QQ号从10000开始) //中国邮政编码 Regex reg = new Regex(@"[1-9]\d{5}(?!\d)");// (中国邮政编码为6位数字) //IP地址 Regex reg = new Regex(@"\d+\.\d+\.\d+\.\d+");// (提取IP地址时有用) //IP地址 Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");
以上是詳解.net正規表示式怎麼使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#.NET生態系統提供了豐富的框架和庫,幫助開發者高效構建應用。 1.ASP.NETCore用於構建高性能Web應用,2.EntityFrameworkCore用於數據庫操作。通過理解這些工具的使用和最佳實踐,開發者可以提高應用的質量和性能。

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

C#和.NET的結合為開發者提供了強大的編程環境。 1)C#支持多態性和異步編程,2).NET提供跨平台能力和並發處理機制,這使得它們在桌面、Web和移動應用開發中廣泛應用。

.NETFramework是一個軟件框架,C#是一種編程語言。 1..NETFramework提供庫和服務,支持桌面、Web和移動應用開發。 2.C#設計用於.NETFramework,支持現代編程功能。 3..NETFramework通過CLR管理代碼執行,C#代碼編譯成IL後由CLR運行。 4.使用.NETFramework可快速開發應用,C#提供如LINQ的高級功能。 5.常見錯誤包括類型轉換和異步編程死鎖,調試需用VisualStudio工具。

C#是一種由微軟開發的現代、面向對象的編程語言,.NET是微軟提供的開發框架。 C#結合了C 的性能和Java的簡潔性,適用於構建各種應用程序。 .NET框架支持多種語言,提供垃圾回收機制,簡化內存管理。

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),