澳门至尊网站-首页

您的位置:澳门至尊网站 > 免费资源 > 正则表明式语法则则详解,正则表达式中的捕获

正则表明式语法则则详解,正则表达式中的捕获

2019-10-24 02:17

捕获组能够捕获正则表达式中的字符形式,何况由正则表明式前面包车型大巴数码或名称来援用改方式。

正则表明式常常包涵字母文本(Literaltext)和元字符(metacharacter)
字母文本指的是常见文本如"abcde"可相称字符串中其它带有"abcde"的字符串。

()——用来捕获当中的字符串
数字——用号码来援引
eg. 正则表明式 (w)(w)21 可相称字符串abba

元字符则更灵活运用通用的表达式相配全部契合此表明式规律的字符串。
C#正则表达式语法风度翩翩、

注意: 1.反向援用用来相称html标签特别实用如<(w+)></1>能够相称<table></table>等周围格式的价签。

相配单个字符 []——从中筛选一个字符相称

            2.私下认可情状下,只要利用圆括号,就能够捕获圆括号内所包罗的字符,能够利用n选项来剥夺那几个暗中同意行为(在第7条里会详细介绍),可能加上?:到圆括号中。eg.                  (?:sophia)或(?n:sophia)此时不会捕获sophia。

中档扶助的门类:单词字符([ae])、非单词字符([!?,;@#$*])、字母范围([A-Z])、数字范围([0])

    (?<捕获组名称>)k<捕获组名称>——用名称来援引

eg.正则表明式[ae]ffect
可相称字符串 affect,effect

eg.

(此例中"[ae]"为元字符,"ffect"为字母文本)

正则表明式(?<sophia>w)abck<sophia> 可相配字符串 xabcx

注意:
1.要在字符类中相称连字符,那么把连字符号作为第二个字符列出就可以。

介意:在轮换形式中利用捕获组的格式略有不一样,要用$1、$2等来按数值援引捕获,用${sophia}等名目来按名称援用捕获组

2.方可在单个正则表明式中包罗多少个字符类。

分组构造 描述 模式 匹配
( subexpression ) 捕获匹配的子表达式并将其分配到一个从零开始的序号中 |(w)1 "deep" 中的 "ee"

eg.[01][0-9]:[0-5][0-9][ap]m能够用来协作如12:59pm格式的兼具时间

法定文书档案参谋组的定义

^——扼杀有些字符(在[]中表此意,还可代表字符串的始发)

eg.正则表达式m[^a]t
可相称字符串
不可相配字符串 met,mit,m&t……mat

C#正则表明式语法二、
同盟特殊字符 能够行使的特殊字符:

t——相称制表符 r——相称硬回车符 f——相称换页符 n——相配换行符 描述表示字符类的元字符:

.——相称任何除了n以外的字符(或许在单行格局中的任何字符) w——相称任何单词字符(任何字母或数字)
W——相配任何非单词字符(除了字母和数字以外的此外字符) s——匹配任何空白字符(满含空格、换行、制表符等)
S——匹配任何非空白字符(除了空格、换行、制表符等的别的字符) d——相称任何数字字符(0~9的数字)
D——相配任何非数字字符(除了0~9以外的别样字符) 表示字符串中字符地点: ^——相配字符串的开始(大概多行情势下行的开首)。
$——相配字符串的最终,可能是字符串结尾“n”在此之前的末尾贰个字符,也许是多行形式中的行结尾。
A——相配字符串的最初(忽视多行格局) Z——相称字符串的末段或字符串结尾“n”早前的结尾五个字符(忽视多行方式)。
z——相称字符串的最后。 G——相配当前寻觅初叶的职位。 b——相称单词的界限。 B——相配单词的非边界。
注意:

1.句点字符(.)特别有用。能够用它来表示别的一个字符。

eg.正则表达式01.17.84
可相配字符串 01/17/84,01-17-84,011784,01.17.84

2.能够使用b相配单词的疆界

eg.正则表明式
可相配字符串 bletblet
不可相称字符串letter,hamlet

3.A和z在担保字符串所含有的是有些表达式,而不是任何故事情节时很用。

eg.要判别Text控件是还是不是包括单词"sophia",而不含任何附加的字符、换行符也许空白。

Asophiaz

4.句点字符(.)具备非同一般的意思,若要表示字母字符本人的含义,在日前加二个反斜杠:.

C#正则表明式语法三、
同盟二选大器晚成的字符种类

|——相称二选豆蔻梢头

eg.正则表明式col(o|ou)r
可相称字符串 color,colour

注意:b(bill|ted)和bbill|ted是莫衷一是的。

后人仍然是能够合作"malted"因为b元字符只应用于"bill"。

C#正则表明式语法四、
用量词相配 *——相称0次或频仍 +——相配1次或频仍 ?——相称0次或1次 {n}——恰好相称n次 {n,}——起码相配n次 {n,m}——最少相称n次,
但相当少于m次
eg.正则表明式brothers?
可匹配字符串 brother,brothers

eg.正则表达式bpd{3,5}
可相配字符串 b以p初阶,且后跟3~5个数字结尾

细心:也得以把量词与()一齐行使,以便把该量词应用到全体字母体系。

eg.正则表达式(The)?schoolisbeautiful.
可相称字符串 schoolisbeautiful,Theschoolisbeautiful.

C#正则说明式语法五、
辨认正则表明式和贪婪 有个别量词是贪心的(greedy).他们会尽恐怕多的极其字符。

如量词*相配0个或五个字符。假诺要相配字符串中任何HTML标签。你也许会用如下正则表达式:

<.*>

现成字符串A<i>quantifier</i>canbe<big>greedy</big>

结果<.*>把<i>quantifier</i>canbe<big>greedy</big>都特出上了。

澳门至尊网站,要减轻该难题,必要与量词一同使用一个破例的非贪婪字符“?”,由此表明式变化如下:

<.*?>

这么就足以准确相称<i>、</i>、<big>、</big>。

?能强制量词尽也许少地相称字符,?仍然为能够用在偏下多少个量词中:

*?——非贪婪的量词* +?——非贪婪的量词+ ??——非贪婪的量词? {n}?——非贪婪的量词{n} {n,}?——非贪婪的量词
{n,} {n,m}?——非贪婪的量词{n,m}
C#正则表明式语法六、
抓获和反向引用 捕获组(capturegroup)就好像正则表明式中的变量。
捕获组能够捕获正则表达式中的字符格局,何况由正则表明式后边的数码或称谓来引用改格局。

()——用来捕获在那之中的字符串

数字——用号码来援引

eg.

正则表明式 (w)(w)21
可相配字符串abba

注意:
1.反向引用用来相配html标签特别有效如<(w+)></1>能够相称<table></table>等看似格式的价签。

2.暗中认可情状下,只要选拔圆括号,就能够捕获圆括号内所包蕴的字符,能够运用n选项来剥夺这一个私下认可行为(在第7条里会详细介绍),
抑或增添?:到圆括号中。eg.(?:sophia)或(?n:sophia)此时不会捕获sophia。

(?<捕获组名称>)k<捕获组名称>——用名称来援引

eg.

正则表达式(?<sophia>w)abck<sophia>
可相配字符串 xabcx

注意:在轮换格局中使用捕获组的格式略有不一致,要用$1、$2等来按数值援引捕获,用${sophia}等名目来按名称援用捕获组

C#正则表明式语法七、
设置正则表明式的挑肥拣瘦

eg.

stringstr="<h4>sophia</h4>"

RegExobjRegEx=newRegEx("<h(d)>(.*?)</h1>");
Response.Write(objRegEx.Replace(str,"<fontsize=$1>$2</font>"));

i——所执行的相配是不区分朗朗上口写的(.net中的属性为IgnoreCase) m——钦赐多行情势(.net中的属性为Multiline)
n——只捕获展现命名或编号的组(.net中的属性为ExplicitCapture) c——编写翻译正则表明式,那样会发生极快的实行进程,但运行会变慢(.net中的属性为Compiled)
s——钦命单行情势(.net中的属性为SingleLine) x——消弭非转义空白字符和注释(.net中的属性为IgnorePatternWhitespace)
r——寻找从右到左实行(.net中的属性为RightToLeft) -——表示禁止使用。
eg.(?im-r:sophia)允许不区分抑扬顿挫写相称sophia,使用多行情势,但禁止使用了从右到左的十分。

注意:
1.m会耳闻则诵咋样深入分析早先元字符(^)和终结元字符($)。
在默许情形^和$只极其整个字符串的起来,即便字符串包涵多行文本。若是启用了m,那么它们就能够协作每行文本的上三保太监末段。

2.s会影响如何深入分析句点元字符(.)。经常一个句点能相配除了换行符以外的装有字符。但在单行形式下,句点也能合营贰个换行符。

from:
文库:

 

常用的C#正则表明式!

"^d+$" //非负整数(正整数 + 0) 
"^[0-9]*[1-9][0-9]*$" //正整数 
"^((-d+)|(0+))$" //非正整数(负整数 + 0) 
"^-[0-9]*[1-9][0-9]*$" //负整数 
"^-?d+$" //整数 
"^d+(.d+)?$" //非负浮点数(正浮点数 + 0) 
"^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数 
"^((-d+(.d+)?)|(0+(.0+)?))$" //非正浮点数(负浮点数 + 0) 
"^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数 
"^(-?d+)(.d+)?$" //浮点数 
"^[A-Za-z]+$" //由三十多少个法语字母组成的字符串 
"^[A-Z]+$" //由三十个匈牙利(Magyarország)语字母的大写组成的字符串 
"^[a-z]+$" //由二十六个英语字母的小写组成的字符串 
"^[A-Za-z0-9]+$" //由数字和贰16个爱尔兰语字母组成的字符串 
"^w+$" //由数字、三十多少个克罗地亚语字母可能下划线组成的字符串 
"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$" //email地址 
"^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$" //url 
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码 
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址 

YYYY-MM-DD基本上把闰年和10月等的意况都思考进去了 
^((((1[6-9]|[2-9]d)d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]d|3[01]))|(((1[6-9]|[2-9]d)d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]d|30))|(((1[6-9]|[2-9]d)d{2})-0?2-(0?[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$

 

C#正则表明式 
图片 src[^>]*[^/].(?:jpg|bmp|gif)(?:"|') 
中文 ^([u4e00-u9fa5]+|[a-zA-Z0-9]+)$ 
网址 "<a.+?href=['""](?!http://)(?!mailto:)(?>foundAnchor>[^'"">]+?)[^>]*?>" 

相配华语字符的正则表明式: [u4e00-u9fa5] 

十一分双字节字符(包涵汉字在内):[^x00-xff] 

拾叁分空行的正则表明式:n[s| ]*r 

匹配HTML标志的正则表达式:/<(.*)>.*</1>|<(.*) />/ 

协作首尾空格的正则表明式:(^s*)|(s*$)(像vbscript那样的trim函数) 

相称Email地址的正则表明式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 

相当网站U奔驰G级L的正则表明式: ./?%&=]*)? 
--------------------------------------------------------------------------- 
以下是例证: 

运用正则表达式限定网页表单里的文本框输入内容: 

用正则表明式约束只好输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))" 

1.用正则表明式约束只可以输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))" 

2.用正则表明式节制只好输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))" 

3.用正则表达式约束只好输入数字和波兰语:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))" 

4.总计字符串的长度(贰个双字节字符长度计2,ASCII字符计1) 

String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;} 

5.javascript中尚无像vbscript那样的trim函数,大家就足以利用那几个表达式来完毕,如下: 

String.prototype.trim = function() 

return this.replace(/(^s*)|(s*$)/g, ""); 

行使正则表达式分解和改换IP地址: 

6.底下是选取正则表明式相配IP地址,并将IP地址转变到对应数值的Javascript程序: 

function IP2V(ip) 

re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式 
if(re.test(ip)) 

return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 

else 

throw new Error("不是三个对的的IP地址!") 

然则上边的程序后生可畏旦不用正则表达式,而间接用split函数来降解恐怕更简明,程序如下: 

var ip="10.100.20.168" 
ip=ip.split(".") 
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) 
(?<=>)[^>]*(?=<)

 正则表明式基础知识

       贰个正则说明式正是由平常字符(比如字符 a 到 z)以致特殊字符(称为元字符)组成的文字形式。该情势描述在检索文字主体时待相称的一个或三个字符串。正则表明式作为一个模板,将有些字符格局与所寻找的字符串举办相称。如: 

JScript VBScript 匹配
/^[ t]*$/ "^[ t]*$" 匹配一个空白行。
/d{2}-d{5}/ "d{2}-d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*</1>/ "<(.*)>.*</1>" 匹配一个 HTML 标记。

下表是元字符及其在正则表明式上下文中的行为的一个总体列表:

字符 描述
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'n' 匹配一个换行符。序列 '\' 匹配 "" 而 "(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 'n' 或 'r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 'n' 或 'r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 匹配除 "n" 之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用象 '[.n]' 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0$9 属性。要匹配圆括号字符,请使用 '(' 或 ')'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
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] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
B 匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
cx 匹配由 指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
d 匹配一个数字字符。等价于 [0-9]。
D 匹配一个非数字字符。等价于 [^0-9]。
f 匹配一个换页符。等价于 x0c 和 cL。
n 匹配一个换行符。等价于 x0a 和 cJ。
r 匹配一个回车符。等价于 x0d 和 cM。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S 匹配任何非空白字符。等价于 [^ fnrtv]。
t 匹配一个制表符。等价于 x09 和 cI。
v 匹配一个垂直制表符。等价于 x0b 和 cK。
w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'x41' 匹配 "A"。'x041' 则等价于 'x04' & "1"。正则表达式中可以使用 ASCII 编码。.
num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)1' 匹配两个连续的相同字符。
n 标识一个八进制转义值或一个向后引用。如果 n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
nm 标识一个八进制转义值或一个向后引用。如果 nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 nm 之前至少有 n 个获取,则 n 为一个后跟文字 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 nm 将匹配八进制转义值 nm
nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, u00A9 匹配版权符号 (©)。

下边看多少个例证:
"^The":表示具备以"The"起初的字符串("There","The cat"等); 
"of despair$":表示为此以"of despair"结尾的字符串; 
"^abc$":表示起先和终极都以"abc"的字符串——呵呵,唯有"abc"自个儿了; 
"notice":表示别的带有"notice"的字符串。 

'*','+'和'?'那八个标识,表示二个或生龙活虎类别字符重复现身的次数。它们各自代表“未有或 
更加多”,“壹遍或越来越多”还或然有“未有或二次”。下边是多少个例子:

"ab*":表示贰个字符串有叁个a前面随着零个或若干个b。("a", "ab", "abbb",……); 
"ab+":表示二个字符串有八个a前面跟着起码一个b也许更加多; 
"ab?":表示一个字符串有三个a前面随着零个要么叁个b; 
"a?b+$":表示在字符串的末段有零个或三个a跟着四个或多少个b。

也能够利用限定,用大括号括起,用以代表重复次数的界定。

"ab{2}":表示一个字符串有一个a跟着2个b("abb"); 
"ab{2,}":表示一个字符串有贰个a跟着最少2个b; 
"ab{3,5}":表示叁个字符串有一个a跟着3到5个b。

请留意,你必需钦命范围的下限(如:"{0,2}"并不是"{,2}")。还恐怕有,你恐怕注意到了,'*','+'和 
'?'相当于"{0,}","{1,}"和"{0,1}"。 
再有贰个'¦',表示“或”操作:

"hi¦hello":表示一个字符串里有"hi"大概"hello"; 
"(b¦cd)ef":表示"bef"或"cdef"; 
"(a¦b)*c":表示风流洒脱串"a""b"混合的字符串后边跟贰个"c";

'.'能够替代任何字符:

"a.[0-9]":表示二个字符串有二个"a"前边随着多少个任性字符和四个数字; 
"^.{3}$":表示有私下多个字符的字符串(长度为3个字符);

方括号表示有个别字符允许在二个字符串中的某意气风发特确定工作岗位位出现:

"[ab]":表示三个字符串有贰个"a"或"b"(也等于"a¦b"); 
"[a-d]":表示三个字符串满含小写的'a'到'd'中的三个(约等于"a¦b¦c¦d"可能"[abcd]"); 
"^[a-zA-Z]":表示二个以字母开端的字符串; 
"[0-9]%":表示二个百分号前有壹个人的数字; 
",[a-zA-Z0-9]$":表示贰个字符串以一个逗号后边跟着三个字母或数字结束。

您也能够在方括号里用'^'表示不希望现身的字符,'^'应在方括号里的率先位。(如:"%[^a-zA-Z]%"表 
示多个百分号中不应当现身字母)。

为了逐字表明,必需在"^.$()¦*+?{"那个字符前增加转移字符''。

请小心在方括号中,无需转义字符。

全盘深入分析C#正则表达式       
到前段时间停止,繁多的编制程序语言和工具都含有对正则表明式的帮衬,当然.NET也不例外,.NET基础类库中隐含有三个称号空间和生龙活虎各个能够充足发挥准则表明式威力的类。 
        正则表明式的文化或许是累累编制程序职员最丧气的事儿了。假设您还并未有准绳表达式方面包车型地铁学识的话,提议从正则表达式的基础知识入手。。 

        上面就来探讨C#中的正则表明式,C#中的正则表明式包蕴在.NET基础雷库的三个名称空间下,那几个名号空间正是System.Text.RegularExpressions。该名称空间包蕴8个类,1个枚举,1个委托。他们分别是:
                     Capture: 包括三回相称的结果; 
                     CaptureCollection: Capture的序列; 
                     Group: 一遍组记录的结果,由Capture承接而来; 
                     GroupCollection:表示捕获组的成团
                     Match: 二次表明式的合营结果,由Group承接而来; 
                     MatchCollection: Match的二个种类; 
                     MatchEvaluator: 实践替换操作时选拔的信托; 
                     Regex:编写翻译后的表明式的实例。 
                     RegexCompilationInfo:提供编写翻译器用于将正则表明式编写翻译为独立程序集的消息
                     RegexOptions 提供用于安装正则表达式的枚举值
Regex类中还带有部分静态的点子: 
                    Escape: 对字符串中的regex中的转义符进行转义; 
                    IsMatch: 尽管表达式在字符串中万分,该措施重回一个布尔值; 
                    Match: 返回Match的实例; 
                    Matches: 重临风流洒脱密密层层的Match的章程; 
                    Replace: 用替换字符串替换相配的表明式; 
                    Split: 重回风流浪漫各样由表达式决定的字符串; 
                    Unescape:不对字符串中的转义字符转义。

下边介绍他们的用途:
        先看一个简约的合营例子,我们首先从使用Regex、Match类的简易表明式起初读书。 Match m = Regex.Match("abracadabra", "(a|b|r)+"); 大家前天有了叁个方可用来测量试验的Match类的实例,比方:if (m.Success){},如若想利用十分的字符串,可以把它转变到一个字符串:   MesaageBox.Show("Match="+m.ToString()); 那些例子能够赢得如下的输出: Match=abra。那就是非凡的字符串了。

        Regex 类表示只读正则表达式类。它还含有各样静态方法(在下边包车型大巴实例师长相继介绍),允许在不显式创设别的类的实例的景色下行使其余正则表明式类。

        以下代码示例创造了 Regex 类的实例并在早先化对象时定义一个概括的正则表明式。声惠氏个Regex对象变量:Regex objAlphaPatt;,接着创造Regex对象的一个实例,并定义其法则:objAlphaPatt=new Regex("[^a-zA-Z]");

        IsMatch方法提醒 Regex 构造函数中钦定的正则表达式在输入字符串中是或不是找到相配项。那是咱们使用C#正则表达式时最常用的艺术之生龙活虎。上面包车型客车事例表明了IsMatch方法的利用:
if( !objAlphaPatt.IsMatch("testisMatchMethod"))
 lblMsg.Text = "相称成功";
else
 lblMsg.Text = "相称不成事";
这段代码实践的结果是“相配成功”
if( ! objAlphaPatt.IsMatch("testisMatchMethod7654298"))
 lblMsg.Text = "相称成功";
else
 lblMsg.Text = "相称不成事";
这段代码实践的结果是“相称不成功”

         Escape方法表示把转义字符作为字符自己使用,而不再持有转义功能,最小的元字符集(、*、+、?、|、{、[、(、)、^、$、.、# 和空域)。Replace方法则是用钦定的轮换字符串替换由正则表明式定义的字符方式的保有相配项。看下边包车型客车例子,仍旧选取方面定义的Regex对象:objAlpha帕特t.Replace("this [test] ** replace and escape" ,Regex.Escape("()"));他的回到结果是:this()()test()()()()()replace()and()escape,即便不是Escape的话,则赶回结果是:this()()test()()()()()replace()and()escape,Unescape 反转由 Escape 施行的改换,可是,Escape 无法完全反转 Unescape。

        Split方法是把由正则表明式相称项定义的地点将输入字符串拆分为二个子字符串数组。比方:
Regex r = new Regex("-"); // Split on hyphens.
string[] s = r.Split("first-second-third");
for(int i=0;i<s.Length;i++)
{
 Response.Write(s[i]+"<br>");
}

 

施行的结果是:
First
Second
Third

        看上去和String的Split方法意气风发致,但string的Split方法在由正则表明式实际不是意气风发组字符显明的相间符处拆分字符串。

        Match方法是在输入字符串中寻找正则表达式的相称项,并Regex 类的 Match 方法再次回到 Match 对象,Match 类表示正则表达式相称操作的结果。上面包车型地铁例证演示Match方法的接纳,并选择Match对象的Group属性再次回到Group对象:

string text = @"public string testMatchObj string s string  match ";
string pat = @"(w+)s+(string)";
// Compile the regular expression.
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
int matchCount = 0;
while (m.Success) 
{
 Response.Write("Match"+ (++matchCount) + "<br>");
 for (int i = 1; i <= 2; i++) 
 {
  Group g = m.Groups[i];
  Response.Write("Group"+i+"='" + g + "'"  + "<br>");
  CaptureCollection cc = g.Captures;
  for (int j = 0; j < cc.Count; j++) 
  {
   Capture c = cc[j];
   Response.Write("Capture"+j+"='" + c + "', Position="+c.Index + "<br>");
  }
 }
 m = m.NextMatch();
}

该事例运转结果是:
Match1
Group1='public'
Capture0='public', Position=0
Group2='string'
Capture0='string', Position=7
Match2
Group1='testMatchObj'
Capture0='testMatchObj', Position=14
Group2='string'
Capture0='string', Position=27
Match3
Group1='s'
Capture0='s', Position=34
Group2='string'
Capture0='string', Position=36

        MatchCollection 类表示成功的非重叠相配的只读的联谊,MatchCollection 的实例是由 Regex.Matches 属性再次回到的,上面包车型客车实例证实了通过在输入字符串中找到全数与Regex中钦点的合作併填充 MatchCollection。

MatchCollection mc;
Regex r = new Regex("match"); 
mc = r.Matches("matchcollectionregexmatchs");
for (int i = 0; i < mc.Count; i++) 
{
 Response.Write( mc[i].Value + " POS:" + mc[i].Index.ToString() + "<br>");
}
该实例运营的结果是:
match POS:0
match POS:20

 


本文由澳门至尊网站发布于免费资源,转载请注明出处:正则表明式语法则则详解,正则表达式中的捕获

关键词: