- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
正则表达式(Java)[精]
正则表达式
正则表达式是JDK 1.4的新功能,但是对sed和awk这样的Unix的标准实用工具,以及Python,Perl之类的语言来讲,它早就已经成为其不可或缺的组成部分了(有人甚至认为,它还是Perl能大获成功的最主要的原因)。单从技术角度来讲,正则表达式只是一种处理字符串的工具(过去Java这个任务是交由String,StringBuffer以及StringTokenizer处理的),但是它常常和I/O一起使用,所以放到这里来讲也不算太离题吧。
正则表达式是一种功能强大但又非常灵活的文本处理工具。它能让你用编程的方式来描述复杂的文本模式,然后在字符串里把它找出来。一旦你找到了这种模式,你就能随心所欲地处理这些文本了。虽然初看起来正则表达式的语法有点让人望而生畏,但它提供了一种精练的动态语言,使我们能用一种通用的方式来解决各种字符串的问题,包括匹配,选择,编辑以及校验。
创建正则表达式
你可以从比较简单的东西入手学习正则表达式。要想全面地掌握怎样构建正则表达式,可以去看JDK文档的java.util.regex的Pattern类的文档。
字符 B 字符B \xhh 16进制值0xhh所表示的字符 \uhhhh 16进制值0xhhhh所表示的Unicode字符 \t Tab \n 换行符 \r 回车符 \f 换页符 \e Escape 正则表达式的强大体现在它能定义字符集(character class)。下面是一些最常见的字符集及其定义的方式,此外还有一些预定义的字符集:
字符集 . 表示任意一个字符 [abc] 表示字符a,b,c中的任意一个(与a|b|c相同) [^abc] 除a,b,c之外的任意一个字符(否定) [a-zA-Z] 从a到z或A到Z当中的任意一个字符(范围) [abc[hij]] a,b,c,h,i,j中的任意一个字符(与a|b|c|h|i|j相同)(并集) [a-z[hij]] h,i,j中的一个(交集) \s 空格字符(空格键, tab, 换行, 换页, 回车) \S 非空格字符([^\s]) \d 一个数字,也就是[0-9] \D 一个非数字的字符,也就是[^0-9] \w 一个单词字符(word character),即[a-zA-Z_0-9] \W 一个非单词的字符,[^\w] 如果你用过其它语言的正则表达式,那么你一眼就能看出反斜杠的与众不同。在其它语言里,\的意思是:“只是要在正则表达式里插入一个反斜杠。没什么特别的意思。”但是在Java里,\的意思是:“要插入一个正则表达式的反斜杠,所以跟在它后面的那个字符的意思就变了。”举例来说,如果你想表示一个或更多的单词字符,那么这个正则表达式就应该是\w+。如果你要插入一个反斜杠,那就得用\\。不过像换行,跳格之类的还是只用一根反斜杠:\n\t。
这里只给你讲一个例子;你应该JDK文档的java.util.regex.Pattern加到收藏夹里,这样就能很容易地找到各种正则表达式的模式了。
逻辑运算符 XY X 后面跟着 Y X|Y X或Y (X) 一个要匹配的组(capturing group). 以后可以用\i来表示第i个被匹配的组。
边界匹配符 ^ 一行的开始 $ 一行的结尾 \b 一个单词的边界 \B 一个非单词的边界 \G 前一个匹配的结束 举一个具体一些的例子。下面这些正则表达式都是合法的,而且都能匹配Rudolph:
Rudolph
[rR]udolph
[rR][aeiou][a-z]ol.*
R.*
数量表示符
数量表示符(quantifier)的作用是定义模式应该匹配多少个字符。
Greedy(贪婪的):
除非另有表示,否则数量表示符都是greedy的。Greedy的表达式会一直匹配下去,直到匹配不下去为止。(如果你发现表达式匹配的结果与预期的不符),很有可能是因为,你以为表达式会只匹配前面几个字符,而实际上它是greedy的,因此会一直匹配下去。
Reluctant(勉强的):
用问号表示,它会匹配最少的字符。也称为lazy, minimal matching, non-greedy, 或ungreedy。
Possessive(占有的):
目前只有Java支持(其它语言都不支持)。它更加先进,所以你可能还不太会用。用正则表达式匹配字符串的时候会产生很多中间状态,(一般的匹配引擎会保存这种中间状态,)这样匹配失败的时候就能原路返回了。占有型的表达式不保存这种中间状态,因此也就不会回头重来了。它能防止正则表达式的失控,同时也能提高运行的效率。
Greedy Reluctant Poss
您可能关注的文档
- tyco 案例分析.docx
- 孙施文教授的城市规划推荐书目.docx
- 8a英语期末练习卷...doc
- 恩波辅导班内部资料.doc
- 北京高考完型常用单词.doc
- 国际劳务输出合同范本.doc
- Hiroshima英语简介.doc
- 英汉句子结构差异 张毅博.doc
- luck 马克吐温 中英文.docx
- 雅思词汇词汇表.doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)