`
angelbill3
  • 浏览: 252906 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

【总结】正则表达式

 
阅读更多
正则表达式(Regular Expresion)= regex / regexp / re
它们通常被用来做字符串的验证,解析和转换。虽然正则表达式并没有完全的标准化,但它的作用却非常大,使用范围也非常广。

首先先介绍一些有用的网站(国外的,可能打开都比较慢):
1、https://en.wikipedia.org/wiki/Regular_expression : 大家熟悉的,维基百科页
2、http://regex.learncodethehardway.org/book/ : 在线学习网站,非常的详细
3、http://txt2re.com :一个提供很多种语言的在线校验正则网站 (包括 perl php python java javascript coldfusion c c++ ruby vb vbscript j# c# c++.net vb.net)
4、https://swtch.com/~rsc/regexp/regexp1.html : 好文章之正则表达式是怎样工作的?
5、http://shop.oreilly.com/product/9780596528126.do : oreilly精品图书系列之<Mastering Regular Expressions>,此书也有中文版,http://www.amazon.cn/精通正则表达式-杰佛瑞E-F-佛瑞德/dp/B008UCHA58/ref=sr_1_2?ie=UTF8&qid=1452325307&sr=8-2&keywords=Mastering+Regular+Expressions

当然不管哪门学科,都可以深入的学习或是只是学会简单的使用,而正则表达式做为一项工具,平时工作用到的可能没有那么深入,以下是比较适合初入门语法学习者的一些语法介绍(语法学习的内容不是原创,应该是我以前刚入门的时候从前辈们的博文中总结下来的):

基础语法:
^   匹配输入字符串的开始位置
$   匹配输入字符串的结束拉置
\d  匹配一个数字字符 = [0-9]
+   匹配 1或多个正好在它之前的那个字符,例:9+ 匹配 9, 99, 999...等
?   匹配 0或1个正好在它之前的字符
.    匹配除\r\n之外的任何单个字符

基础字符:
  .    []    ^    $ 


其它:
*   匹配前面的子表达式0次或多次,例:zo*能匹配 z, zoo, zooo... *等价于{0, }
{n} 确定匹配n次,n>=0;例:0{2} 能匹配: food
{n,} 至少匹配n次,n>=0;例:0{2,},不能匹配Bob,但能匹配fooooood中所有的o
\w 匹配包括下划线的任何单词字符,等价:[A-Za-z0-9_]
[xyz] 字符集合,匹配所包含的任意一个字符,例:[abc] 匹配plain中的a
[A-Z] 字符范围
\n 换行
{i},{i, j} 匹配指定数目的字符,表示长度


等价:
?   等价于匹配长度 {0, 1}
*   等价于匹配长度 {0, }
+  等价于匹配长度 {1, }
\d 等价于 [0-9]
\w 等价于 [A-Za-z0-9_]

分割语法
[ ]  包含
[^] 不包含
{ }  匹配长度

如:^([]{})([]{})([]{})$ = 开始([包含内容]{长度})(..)结束

---------------------------------------------------------------------
例子:
1、匹配整数
^\d+$ 等于 ^[0-9]{1,}$
解释:开始[数字0-9]{长度大于等于1}结束 = 长度大于1的数,即整数

2、验证用户名或密码
^[a-zA-Z]\w{5,15}$
解释:开始[目标字符为英文字符][下划线、英文或数字]{长度为5-15}结束 = 由下划线、英文、数字组成的5-15位的字符,首位必须是英文字母。

3、匹配test/开头,但结尾不能为.html结尾的路径
test/.*?[^\.html]
解释:test/[除\n\r的任何字符]{长数为0或1}[不包含.html]
[^\.html] 这里的\. 等价于目标字符:. (点本身),原因是因为.本来是正则语法里的语法之一,所以用\ 来先转义

---------------------------------------------------------------------
JAVA端使用:
1、验证目标字符是否匹配
String reg = "^\\d+$";
String str = "10086";
boolean result = str.matches(reg));
// result: true



2、按格式截取字符
String str = "&id=10086&name=helloworld";
Pattern p = Pattern.compile("&id=([^&]*)");
Matcher m = p.matcher(str);
if (m.find()) {
        String result = m.group(1);
}
// result: 10086
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics