基于C#的 正则表达式



基础的语法:


字  符

描  述

\

转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来

^

匹配输入字符串的开始位置

$

匹配输入字符串的结束位置

*

匹配前面的零次或多次的子表达式

+

匹配前面的一次或多次的子表达式

?

匹配前面的零次或一次的子表达式

{n}

n是一个非负整数,匹配前面的n次子表达式

{n,}

n是一个非负整数,至少匹配前面的n次子表达式

{n,m}

mn均为非负整数,其中n<=m,最少匹配n次且最多匹配m

?

当该字符紧跟在其他限制符(*,+,?,{n},{n,},{nm})后面时,匹配模式尽可能少的匹配所搜索的字符串

.

匹配除“\n”之外的任何单个字符

(pattern)

匹配pattern并获取这一匹配

(?:pattern)

匹配pattern但不获取匹配结果

(?=pattern)

正向预查,在任何匹配pattern的字符串开始处匹配查找字符串

(?!pattern)

负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串

x|y

匹配xy。例如,‘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

匹配一个单词边界,指单词和空格间的位置

\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_]’


为了容易理解我将上面的符号分为4种类型:

1.数值型:

. x|y [xyz] [^xyz] [a-z] [^a-z] [0-9] [^0-9]

2.系数型

* + ? {m} {m,} {m,n}  ?

3.取值

(pattern) (?:pattern)

4.具有特定含义的转义字符

\ ^ $  \dD \wW \bB \sS \f \t \n \r \v


补冲:@"" 的字符串 比较"" 该叫原意字符串 

例如@"\n" 代表一个换行 ,;里面的 "\" 没有转义  而"\n" 写出来会报错 ;用来写正则字符串非常合适.



C#部分

引入命名空间 using System.Text.RegularExpressions;

实用函数

            //生成正则式
            Regex re = new Regex(@"name:(\w+)");

            //Match 函数
            //参数 参与匹配的字符串
            //匹配到的第一个对象 
            Match ma = re.Match(a);
            string s = ma.ToString();

            //Matchs 函数
            //参数 参与匹配的字符串
            //匹配到所有 
            MatchCollection collection = re.Matches(a);
            Array array = new Match[collection.Count];
            collection.CopyTo(array, 0);
            foreach (Match ob in array)
            {
                string s1 = ob.ToString();
            }
            // 获得结果形如 name:**** 的字符串



            //用法和字符串的Replaced方法一样
            //先对字符串用正则式匹配,
            //匹配到的结果用新的字符串替换
            string b = re.Replace(a, "替换字符串");

 
            //提取()的内容
            //()提取的内容会放大Group属性里面,
            //值得注意的是他是从下标1 开始的
            Match ma1 = re.Match(a);
            string s2 = ma1.Groups[1].Value;

接下啦是一些对符号测试的小代码

1. ^ $ 本身就是特殊字符,不需要转义

            // ^ $ 而不是 \^ \$
            string testStr = "begin 589840964 三分法djkshsk end";
            Regex re = new Regex(@"^b.+$");
            Match ma = re.Match(testStr);
            string str = ma.ToString();//查询到整个字符串
2.系数影响的范围

            // + 系数符号是前面的一位
            string testStr = "begin 58988840964 三分法djkshsk end";
            Regex re = new Regex(@"98+");
            Match ma = re.Match(testStr);
            string str = ma.ToString();//98888 不是98
3.系数补充,()作为一个单位提供给系数

            //添加括号之后可以对多个字符进行叠加
            string testStr = "begin 58988840964 三分法djkshsk end";
            Regex re = new Regex(@"(?:88)+");
            MatchCollection collection = re.Matches(testStr);
            Array array = new Match[collection.Count];
            collection.CopyTo(array, 0);
            foreach (Match ob in array)
            {
                string s1 = ob.ToString();//结果 "88" 而是不8
            }

4. | 的作用范围

            //| 选择会以自身为边界分为两个,如果只做局部的区分要使用好()的组合
            string testStr = "begin 58988840964 三分法djkshsk end";
            Regex re = new Regex(@"(?:5|9)8.+");  //58 98
            //Regex re = new Regex(@"5|98.+");  // 5 98
            Match ma = re.Match(testStr);
            string str = ma.ToString();

还有疑问自己测


文章转自http://www.cnblogs.com/gc2013/p/4071757.html





















































 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值