正则表达式入门
来源:互联网 发布:遗传算法讲解 编辑:程序博客网 时间:2024/06/05 19:22
原文地址:http://blog.csdn.net/sq_zhuyi/article/details/12848509
写程序7年,从我身边接触到的人来看,相当多的程序员把正则表达式看得很高深,甚至觉得是一道不可跨越的鸿沟。有此想法的原因很简单:只是因为你没有花上几个小时的时间去学习一下正则的基础。对,只需要几个小时,你就能编写出自己需要的正则表达式。为了引导这些不敢触碰正则的朋友,我特别写了这篇正则的入门文章,希望能够帮到你们。
正则表达式是什么?
比较正规的解释是:正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
在这里,我希望使用一个更为通俗的自然语言来描述它:正则表达式就是用一类字符的统称来描述这一大批字符。举个例子,正则里说汉字,那么其实它就涵盖了所有的中国文字。
现在你是否明白了正则到底是个什么东西了吧?仍不明白?不要紧,继续往下看,文中会通过一些简单的实例来帮助你对正则的理解。
为什么要用正则表达式?
可以这么说,正则表达式能做的,都能够通过正常的编程来实现。那么我们为什么还要学习正则呢?原因很简单:
1)正则表达式能够很大幅度的简化代码,实现起来也更为顺手;
2)用正则表达式去处理字符串,代码更容易理解;
3)通常来说,正则表达式的速度远比自己写逻辑要高很多;
正则表达式要怎么使用?
正则表达式具体怎么使用取决于你用什么编程语言,我们先看大家都熟悉的Javascript.
- var reg = new RegExp("^[a-z]+$"); //也可以写成:var reg = /^[a-z]+$/;
^:表示字符串的开始
[a-z]:表示任意小写的字母
+:表示前边的字母至少出现1次,上不封顶
$:表示字符串的结束
应用一:reg.test("abcd") //true
从头到尾都是小写的英文字母,所有匹配成功,返回true
应用二:reg.test("8ddde") //false
因为开头不是字母,所以匹配失败,返回false
我们再看在C#中正则怎么使用(首先要引用名字空间:System.Text.RegularExpressions)。
- Regex reg = new Regex("^[a-z]+$");
- reg.IsMatch("abcd"); //true
- reg.IsMatch("8ddde"); //false
前边所列举都是用正则去检测一个字符串是否是预期的规则,现则我们再用正则去获取一个大字符串中需要的内容。
- var str = "正则表达式(Regular Expression)是对字符串操作的一种逻辑公式"
- var reg = /[a-zA-z]+/g; //最后加个“g”表示查找所有符合条件的,不带“g”表示查找第一个符合条件的
- var result = str.match(reg); //返回的result是一个数组,包含所有查找到的内容
- // result[0]: Regular
- // result[1]: Expression
再看C#中如何实现。
- string str = "正则表达式(Regular Expression)是对字符串操作的一种逻辑公式"
- Regex reg = new Regex("[a-zA-Z]+");
- MatchCollection result = reg.Matches(str);
- foreach (Match m in result) {
- Console.WriteLine(m.Value);
- }
Regular
Expression
正则表达式中的元字符
要写出正则表达式,一定要知道表达式中可以使用哪些字符,代表哪些意思。这好比“人类”代表黄种人、白种人、黑种人等。下边列出了所有的元字符和对于的描述。
元字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配一个换行符。“\\n”匹配字符"n"。序列“\\”匹配“\”而“\(”则匹配“(”。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。*匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。+匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。?匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“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”在内的任何字符,请使用像“[\s\S]”的模式。(pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“ 0 0
- 正则表达式入门
- 正则表达式[入门]
- 正则表达式入门
- 正则表达式入门
- 正则表达式入门
- 入门正则表达式例子
- 正则表达式入门
- 正则表达式入门
- 正则表达式入门文档
- 正则表达式入门
- java正则表达式入门
- 正则表达式入门
- 正则表达式快速入门
- 正则表达式快速入门
- 正则表达式入门
- 正则表达式入门
- 正则表达式快速入门
- 正则表达式快速入门
- 浙江大学PAT_甲级_1036. Boys vs Girls (25)
- ios图片拉伸的问题
- Python 的 urllib2
- keil工具之uvmpw文件
- 正则表达式语法
- 正则表达式入门
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 递归与分治算法
- LRU最近最久未使用算法
- 互联网协议入门(一)
- linux 权限掩码 umask
- 【SuperMap .Net 组件】地图与场景同步(二) 视图范围同步
- Java之JNI参数传递
- GRE作文备考——行动理论