正则表达式经常用到,以前都是去网上找写好的,然后找个测试工具测试下,自己不会写,也看不懂,终于下定决心,仔细学习。
其实以前也想过学,但每次看到那么多规则就失去兴趣了,所以今天打算弄些干货(我也不知道能不能弄出干货)
由于今天的目标是先读懂(单纯的认为读多了,慢慢的可能就会写了),所以肯定不会一来就写各种规则,网上那种文章太多,那也不是我的风格,我要一边读,一边写,一边学。
string regex = ",|,|\\s+"; string[] split = Regex.Split(inputString, regex);
上面两行代码,应该经常用到,现在来读懂他
',' 和 ',' 就不多说了,中间的'|'指明两项之间的一个选择,所以前面表示的就是 ',' 或者','
\s 在正则规则里面有特殊的含义,表示匹配任何空白字符,包括空格、制表符、换页符等
那么为什么\s前面还有一个 \ ,这个问题我也在纠结,因为我用正则表达式测试工具测试时 ,|,|\s+ 才能正确匹配,网上打大牛说,如果是用在程序中,需要把\s进行转义,不然不能识别出,好吧,只好打开我的VS了,我在VS里面改成了 ,|,|\s+ 然后就报错了,说s是不能识别的转义序列,好吧,你赢了。
所以总结下:
1.如果是确定了输入的是正则表达式,就如测试工具,里面输入的都是正则表达时,这时就不用 \ 来转义了
2.如果是利用字符串来表示正则,如上面的代码 string regex = ",|,|\\s+"; 那么就需要用 \ 转义
如理解有误,请指出,我也好学习。
+ 表示匹配前面的子表达式一次或多次,这里就是匹配前面的空格字符一次或者多次,也就是说,一个或者多个空白字符,都被认为是“一个”
到这里,解析完了,上面的代码:遇到, , 或者空白字符时即切割字符串。如果没有+,每一遇到一个空白字符时就要切割一次,连续多个就要被切割多次。
第一句就解释了半天,干货好像没戏了。
第二句:^[1-9]\d*$ 和 [1-9]\d* ,这两句都是匹配正整数,但是有区别的
^:匹配输入字符串开始的位置、$:匹配输入字符串结束的位置 \d 匹配一个数字字符,等价于 [0-9]
说实话,我是没读懂这解释是什么意思,所以我也就没懂上面两句的区别,试试呗,实践是检验真理的唯一标准
被测试的字符串:asdf 123456 asdf
^[1-9]\d*$ 匹配结果: 没有匹配
[1-9]\d* 匹配结果: 123456
好像懂了点什么,但是又说不出,奈何表达能力太差,机智的我又进行了几个测试:
^[1-9]\d* | [1-9]\d*$ | |
asdf 123456 | 无匹配 | 123456 |
asdf 123456 (多了个空格) | 无匹配 | 无匹配 |
123456 asdf | 123456 | 无匹配 |
123456 asdf (多了个空格) | 无匹配 | 无匹配 |
现在好理解了吧:自己意会去
^字符串的第0个位置开始,不能从中间开始 如果^用在[]里面,如:[^]含义大变
^$表示从字符串开始到结束都要符合中间的规则,相当于被验证的字符串是一个整体,不能分开,匹配的结果只能是:无 或者 整个字符串完全匹配
今天就写到这里吧,算是简单认识了正则表达式,要看懂常用的,还有很远的路要走,一次写多了也记不住。
转载一篇文章,正则表达式全部符号解释。文章出处:http://www.cnblogs.com/yirlin/archive/2006/04/12/373222.html