正则表达式7
- 格式:pdf
- 大小:538.96 KB
- 文档页数:11
常用的正则表达式整理1、非负整数:^\d+$2、正整数:^[0-9]*[1-9][0-9]*$3、非正整数:^((-\d+)|(0+))$4、负整数:^-[0-9]*[1-9][0-9]*$5、整数:^-?\d+$6、非负浮点数:^\d+(\.\d+)?$7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)) $8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$9、负浮点数:^(-((正浮点数正则式)))$10、英文字符串:^[A-Za-z]+$11、英文大写串:^[A-Z]+$12、英文小写串:^[a-z]+$13、英文字符数字串:^[A-Za-z0-9]+$14、英数字加下划线串:^\w+$15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$17、邮政编码:^[1-9]\d{5}$18、中文:^[\u0391-\uFFE5]+$19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$ 20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$21、双字节字符(包括汉字在内):^\x00-\xff22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>24、匹配空行:\n[\s| ]*\r25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)29、提取信息中的中国手机号码:(86)*0*13\d{9}30、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}31、提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+34、提取信息中的任何数字:(-?\d*)(\.\d+)?35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)36、电话区号:/^0\d{2,3}$/37、腾讯QQ号:^[1-9]*[1-9][0-9]*$38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配中文字符的正则表达式:[\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S *)?$匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$下表是元字符及其在正则表达式上下文中的行为的一个完整列表:\将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
正则表达式是一种用来描述字符模式的工具,它可以帮助我们在文本中搜索、替换和匹配特定的内容。
在实际应用中,常常会遇到需要匹配特定字母或字母数字组合的情况。
本文将介绍10个以内字母或字母数字的正则表达式,帮助读者更好地理解和运用这一强大的工具。
1. 匹配单个小写字母:正则表达式:[a-z]解释:这个正则表达式可以匹配任意一个小写字母,包括a、b、c等。
2. 匹配单个大写字母:正则表达式:[A-Z]解释:这个正则表达式可以匹配任意一个大写字母,包括A、B、C等。
3. 匹配单个数字:正则表达式:[0-9]解释:这个正则表达式可以匹配任意一个数字,包括0、1、2等。
4. 匹配字母数字组合:正则表达式:[a-zA-Z0-9]解释:这个正则表达式可以匹配任意一个字母或数字,包括大小写字母和数字。
5. 匹配特定数量的字母或数字:正则表达式:[a-zA-Z0-9]{n}解释:这个正则表达式可以匹配包含n个字母或数字的字符。
6. 匹配至少一个字母或数字:正则表达式:[a-zA-Z0-9]+解释:这个正则表达式可以匹配至少一个字母或数字的字符,包括单个字母或数字、字母数字组合等。
7. 匹配不超过m个字母或数字:正则表达式:[a-zA-Z0-9]{,m}解释:这个正则表达式可以匹配不超过m个字母或数字的字符。
8. 匹配字母开头的字母数字组合:正则表达式:[a-zA-Z][a-zA-Z0-9]*解释:这个正则表达式可以匹配以字母开头的任意字母数字组合,包括单个字母、字母数字组合等。
9. 匹配以字母或数字结尾的字母数字组合:正则表达式:[a-zA-Z0-9]*[a-zA-Z0-9]解释:这个正则表达式可以匹配以字母或数字结尾的任意字母数字组合,包括单个字母、字母数字组合等。
10. 匹配不包含特定字符的字母或数字组合:正则表达式:[^特定字符]解释:这个正则表达式可以匹配不包含特定字符的任意字母或数字组合,可以根据实际需求替换"特定字符"。
正则表达式语法大全前言:一般开发中都会接触到正则表达式,作为一名合格的前端,也应该了解一下正则表达式编写原则,便于自己也能快速编写想要的正则表达式。
1、作用(正则表达式是一种字符串匹配的模式)数据验证:比如电话号码、邮箱等替换文本:快速找到特定文本,用于替换快速提取字符串:基于匹配原则,快速从文档中查找或提取子字符串2、语法(普通字符+特殊字符)普通字符[abc] 匹配[...]的所有字符[^abc] 取反,除了[...]的其他字符[A-Z] 区间字母A到Z.匹配除(\n换行符 \r 回车符)的任何单个字符\s \S 匹配所有,\s所有空白符,包括换行 \S非空白符,不包括换行\w 匹配字母、数字、下划线特殊字符$ 结尾位置(匹配$字符----\$)^ 开始位置(匹配$字符----\^)() 子表达式开始和结束(匹配字符----\( 和 \))* 匹配零次或多次(匹配字符----\*)+匹配一次或多次(匹配字符----\+)匹配零次或一次(匹配字符----\?)| 两项间的一个(匹配字符----\|)限定符{n} n为非负整数,匹配n次{n,} n为非负整数,至少n次{n,m} n为非负整数,n<=m,最少n次,最多m次修饰符i 不区分大小写g 全局匹配m 多行匹配s 特殊字符远点包含换行符3、常用场景•16进制颜色/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/以#开始,6或3个字符(A-F、a-f、0-9)结尾•电话号码/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/以1开头,3可跟任一数字(\d),4可跟5-9,5可跟0-3或5-9 ,6后2567其中一个,7后是0-8,8后任一数字,9后是0-3或3-5,其余8位是任意数字(\d{8})•身份证号/^[1-9]\d{5}(19|20|21)\d{2}(0[1-9]|10|11|12)(0[1-9]|[1-2]\d|30|31)\d{3}[\dX]$/ 第一位在0-9区间,后面是5位任意数字,4位年份(19、20、21开头,后两位任意),两位代表月份(0开头的1-9或者是10、11、12),两位日期(01-31),三位顺序码,最后一位是校验码,可数字可X•网址/^((https?):)?\/\/([^?:/]+)(:(\d+))?(\/[^?]*)?(\?(.*))?/•邮箱^[A-Za-z0-9-_\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$ 名称有汉字([\ue00-\u9fa5])、字母([a-zA-z])、数字、下划线、中划线,域名有数字、字母、下划线、中划线4、使用方法字符串.match(正则):返回符合的字符串,若不满足返回null字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1字符串.replace(正则,新的字符串):找到符合正则的内容并替换正则.test(字符串):在字符串中查找符合正则的内容,满足则返回true,反之为false说明:new RegExp(规则).test(字符串)和上面写法作用相同。
正则表达式150种表达方式1、删除所有数字。
只要查找:\d就OK。
为了不留空行:替换处:\d2、删除所有英文字母。
只要查找:\a就OK。
为了不留空行:替换处:\d3、删除除换行符以外的所有。
只要查找:. 为了不留空行:替换处:\d4、既删除英文字母又删除数字。
只要查找:\w。
为了不留空行:替换处:\d5、删除数字加字母加等于(如:3a=或3zz=)只要查找:\d+\a+\=。
为了不留空行:替换处:\d6、删除换行。
只要查找:$。
替换处:\d(还原查找:\a+=\f。
替换:\0\n)。
如在换行后加一空格,查找:(\a)$。
替换:\0 \d。
7、删除空行只要查找:^$。
为了不留空行:替换处:\d8、删除首尾空格。
只要查找:^\s*|\s*$就OK9、删除行前数字及顿号。
只要查找:\d+、替换为空10、删除末尾标点符号。
只要查找:\P+$|\P+\s+$,“|”前面是没有空格的,“|”后面有空格,P后的加是为了……而用的。
11、删除末尾空格。
只要查找:\s+$。
替换为空。
12、删除第一个字如:“的我们”中的“的”只要查找:^\的。
13、删除第几个字。
查找:查找:^().(.+)。
替换:\1\2。
去掉前面的拼音:查找:^\a+替换为空。
第一个括号里可加“.”且可变。
14、删含的。
查:.*的.*替:\d。
的头查:.*=的.*替:\d。
的尾查:\a.*\c.*的$替:\d(留它不匹配)●删非的行查:^[^的]+$替:\d15、删除几码以上的码查:^(...)...替:\1。
删第几位码。
查:^(...).(.+)替:\1\2(变成\1,\2则其位则改成,了)首括号的.可变。
16、删除各类型的几字词,但必须是码前词后或纯词。
三字词:查找:^\~f{}\f{3}$替换:\d。
替换:\d “3”可以改。
17、删除11字词及其以上的词条查找(自定义格式):\a{}\=(\c|\P|\p){11,}。
替换:\d。
11可改。
正则表达式公式大全正则表达式是一种处理字符串的强大工具,它可以帮助我们快速、高效地匹配、替换、删除、提取字符串。
很多编程语言,包括Python、Java、JavaScript等都支持正则表达式,所以掌握正则表达式是非常重要的。
下面是一些常用的正则表达式公式:1. 匹配单个字符:(1).点号(.)表示匹配任何单个字符,除了换行符。
(2)\d表示数字,等价于[0-9]。
(3)\D表示非数字,等价于[^0-9]。
(4)\w表示字符,包括数字、字母和下划线,等价于[a-zA-Z0-9_]。
(5)\W表示非字符,等价于[^a-zA-Z0-9_]。
(6)\s表示空白字符,包括空格、制表符、换行符等。
(7)\S表示非空白字符。
2. 匹配重复字符:(1)*表示重复0次或更多次。
(2)+表示重复1次或更多次。
(3)?表示重复0次或1次。
(4){n}表示重复n次。
(5){n,}表示重复n次或更多次。
(6){n,m}表示重复n到m次。
3. 匹配位置:(1)^表示匹配开头位置。
(2)$表示匹配结尾位置。
(3)\b表示匹配单词边界。
(4)\B表示匹配非单词边界。
4. 匹配分组:(1)( )表示一个分组。
(2)\1、\2、\3等表示对之前的分组的引用。
(3)(?: )表示一个非捕获分组。
5. 匹配字符集:(1)[ ]表示一个字符集,例如[abc]表示匹配a、b、c中的任意一个字符。
(2)[^ ]表示一个否定字符集,例如[^abc]表示匹配除了a、b、c以外的任意一个字符。
(3)[a-z]表示一个范围,表示匹配a至z中的任意一个字母。
6. 匹配转义字符:(1)\表示转义字符,例如\\.表示匹配点号。
(2)\n表示匹配换行符。
(3)\r表示匹配回车符。
(4)\t表示匹配制表符。
(5)\xx表示匹配十六进制字符。
以上是一些常用的正则表达式公式,如果我们能够熟练掌握这些公式,就可以很好地应用正则表达式来处理字符串。
当然,对于不同编程语言来说,对于正则表达式的支持也会有所不同,所以需要我们在实际应用中注意区别。
自然数的正则表达式自然数是指从1开始的整数,即1、2、3、4……。
在数学中,自然数是最基本的数集,也是人们日常生活中最常用的数。
在计算机科学中,正则表达式是一种用于匹配字符串的模式。
我们可以使用正则表达式来匹配自然数。
下面是一些常见的自然数的正则表达式:1. 匹配任意自然数:\d+这个正则表达式可以匹配任意长度的自然数,包括1、2、3、4……。
其中\d表示匹配任意一个数字,+表示匹配前面的元素一次或多次。
2. 匹配大于等于1的自然数:[1-9]\d*这个正则表达式可以匹配大于等于1的自然数,包括1、2、3、4……。
其中[1-9]表示匹配1到9中的任意一个数字,\d*表示匹配前面的元素零次或多次。
3. 匹配大于等于0的自然数:[0-9]\d*这个正则表达式可以匹配大于等于0的自然数,包括0、1、2、3、4……。
其中[0-9]表示匹配0到9中的任意一个数字,\d*表示匹配前面的元素零次或多次。
4. 匹配偶数:[0-9]*[02468]这个正则表达式可以匹配偶数,包括0、2、4、6、8、10……。
其中[0-9]*表示匹配前面的元素零次或多次,[02468]表示匹配0、2、4、6、8中的任意一个数字。
5. 匹配奇数:[0-9]*[13579]这个正则表达式可以匹配奇数,包括1、3、5、7、9、11……。
其中[0-9]*表示匹配前面的元素零次或多次,[13579]表示匹配1、3、5、7、9中的任意一个数字。
通过使用这些正则表达式,我们可以方便地在字符串中匹配出自然数。
在实际应用中,正则表达式在文本处理、数据提取、验证输入等方面都有广泛的应用。
总结起来,自然数的正则表达式有多种形式,可以根据具体的需求选择合适的表达式进行匹配。
使用正则表达式可以方便地在字符串中提取出自然数,实现很多实际应用。
但需要注意的是,在使用正则表达式匹配自然数时,要确保表达式的准确性和严谨性,避免出现歧义或错误的匹配结果。
希望通过本文的介绍,读者对自然数的正则表达式有了更深入的了解,能够在实际应用中灵活运用。
7到15正则表达式
正则表达式是一种用于匹配特定模式的工具,它可以在文本中查找、替换和提取信息。
在日常的编程工作中,正则表达式是一个非常强大的工具,可以帮助我们快速地完成一些复杂的任务。
本文将介绍从7到15位长度的正则表达式,帮助读者更好地掌握正则表达式的应用。
在正则表达式中,我们可以使用一些特殊字符和语法来描述我们所需的模式。
例如,圆括号可以用来分组,方括号可以用来指定字符集合,星号和加号可以用来表示重复等。
下面是一些常用的正则表达式:
1. /^d{7}$/:该正则表达式可以匹配7位数字。
2. /^d{8,15}$/:该正则表达式可以匹配8到15位数字。
3. /^[a-zA-Z0-9_]{6,12}$/:该正则表达式可以匹配6到12位字母数字下划线。
4. /^[u4e00-u9fa5]{2,6}$/:该正则表达式可以匹配2到6个汉字。
5. /^[a-zA-Z]+$/:该正则表达式可以匹配一个或多个字母。
6. /^([01][0-9]|2[0-3]):[0-5][0-9]$/:该正则表达式可以匹配24小时制的时间。
7. /^([1-9][0-9]{0,2}|1000)$/:该正则表达式可以匹配1到1000的整数。
以上是一些常用的正则表达式,读者可以根据实际需要进行调整
和修改。
在实际应用中,正则表达式不仅可以用来匹配文本,还可以用来验证用户输入、替换文本等。
但是需要注意的是,正则表达式的语法比较复杂,需要经过一定的练习和实践才能熟练掌握。
正则表达式任意字符7次【实用版】目录1.正则表达式的概念2.正则表达式中的“任意字符”含义3.“任意字符 7 次”的正则表达式表示4.实际应用示例正文1.正则表达式的概念正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串模式的字符集,通常用于文本搜索和数据提取工具中,可以迅速找到符合特定规则的字符串。
正则表达式具有强大的表达能力,能够描述非常复杂的字符串模式。
2.正则表达式中的“任意字符”含义在正则表达式中,“任意字符”表示可以是任何一种字符,包括字母、数字、符号等。
它可以用来匹配字符串中的任意位置,无论该位置的字符是什么。
3.“任意字符 7 次”的正则表达式表示“任意字符 7 次”可以用正则表达式表示为:`[任意字符]{7}`,这里的`{7}`表示匹配前面的字符(即任意字符)连续出现 7 次。
4.实际应用示例假设我们有一个包含众多字符串的文本,现在需要提取其中所有满足“任意字符 7 次”规律的字符串。
我们可以使用正则表达式来实现这个功能。
例如,在 Python 中,可以使用`re`库来实现这个功能:```pythonimport retext = "这是一个示例文本,包含许多字符串,如 123456、abcdefg、1a2b3c4d5e6f、A1B2C3D4E5F6 等。
"pattern = r"[任意字符]{7}"result = re.findall(pattern, text)print(result)```运行上述代码,可以得到一个包含所有满足条件的字符串的列表,例如:`["123456", "abcdefg", "1a2b3c4d5e6f", "A1B2C3D4E5F6"]`。
python正则表达式(7)--flag修饰符、match对象属性正则表达式—修饰符正则表达式可以包含⼀些标志修饰符来控制匹配模式,⽤在正则表达式处理函数中的flag参数中,为可选参数。
(1) re.I 全写(re.IGNORECASE)表⽰使匹配时,忽略⼤⼩(2) re.M 全写(re.MULTILINE)多⾏匹配,影响 ^ 和 $的⾏为(3) re.S 全写(re.DOTALL)使点(.)匹配包括换⾏在内的所有字符(4) re.X 全写(re.VERBOSE)这个模式下正则表达式可以是多⾏,忽略空⽩字符,并可以加⼊注释。
(5) 除以上标志外还有re.L和re.U,但不常⽤(6) 可以通过使⽤运算符“|“来指定多个标志,表⽰同时⽣效。
如: re.I | re.M被设置成I和M标志,content = 'My username is zeke999!'re.search(r'zeke\d{3}', content, re.I | re.M)Match对象的属性(1)string 属性:获取匹配时使⽤的字符串对象>>> m = re.match(r'\d+','456abc')>>> m.string'456abc'(2)re 属性:匹配时使⽤的pattern对象,也就是匹配到内容的正则表达式对象>>> m<_sre.SRE_Match object at 0x02C8FA68>>>> m.re<_sre.SRE_Pattern object at 0x02D4ECD0>(3)pos属性:该属性表⽰⽂本中正则表达式开始搜索的索引。
值与Pattern.match()和Pattern.seach()⽅法中的同名参数相同>>> m.pos(4)endpos属性:该属性表⽰⽂本中正则表达式结束搜索的索引。
Java正则表达式详解仙人掌工作室如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。
如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。
许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。
那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。
然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从下载源代码开放的Jakarta-ORO库。
本文接下来的内容先简要地介绍正则表达式的入门知识,然后以Jakarta-ORO API为例介绍如何使用正则表达式。
一、正则表达式基础知识我们先从简单的开始。
假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”。
如果搜索对大小写不敏感,单词“catalog”、“Catherine”、“sophisticated”都可以匹配。
也就是说:1.1句点符号假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。
另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。
要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。
这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。
这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符:1.2方括号符号为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。
此时,只有方括号里面指定的字符才参与匹配。
也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。
但“Toon”不匹配,因为在方括号之内你只能匹配单个字符1.3“或”符号如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。
“|”操作符的基本意义就是“或”运算。
要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。
这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。
圆括号还可以用来分组,具体请参见后面介绍。
1.4表示匹配次数的符号表一显示了表示匹配次数的符号,这些符号用来确定紧靠该符号左边的符号出现的次数:假设我们要在文本文件中搜索美国的社会安全号码。
这个号码的格式是999-99-9999。
用来匹配它的正则表达式如图一所示。
在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。
因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”。
图一:匹配所有123-12-1234形式的社会安全号码假设进行搜索的时候,你希望连字符号可以出现,也可以不出现——即,999-99-9999和999999999都属于正确的格式。
这时,你可以在连字符号后面加上“?”数量限定符号,如图二所示:图二:匹配所有123-12-1234和123121234形式的社会安全号码下面我们再来看另外一个例子。
美国汽车牌照的一种格式是四个数字加上二个字母。
它的正则表达式前面是数字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。
图三显示了完整的正则表达式。
图三:匹配典型的美国汽车牌照号码,如8836KV1.5“否”符号“^”符号称为“否”符号。
如果用在方括号内,“^”表示不想要匹配的字符。
例如,图四的正则表达式匹配所有单词,但以“X”字母开头的单词除外。
图四:匹配所有单词,但“X”开头的除外1.6圆括号和空白符号假设要从格式为“June26,1951”的生日日期中提取出月份部分,用来匹配该日期的正则表达式可以如图五所示:图五:匹配所有Moth DD,YYYY格式的日期新出现的“\s”符号是空白符号,匹配所有的空白字符,包括Tab字符。
如果字符串正确匹配,接下来如何提取出月份部分呢?只需在月份周围加上一个圆括号创建一个组,然后用ORO API(本文后面详细讨论)提取出它的值。
修改后的正则表达式如图六所示:图六:匹配所有Month DD,YYYY格式的日期,定义月份值为第一个组1.7其它符号为简便起见,你可以使用一些为常见正则表达式创建的快捷符号。
如表二所示:表二:常用符号例如,在前面社会安全号码的例子中,所有出现“[0-9]”的地方我们都可以使用“\d”。
修改后的正则表达式如图七所示:图七:匹配所有123-12-1234格式的社会安全号码二、Jakarta-ORO库有许多源代码开放的正则表达式库可供Java程序员使用,而且它们中的许多支持Perl5兼容的正则表达式语法。
我在这里选用的是Jakarta-ORO正则表达式库,它是最全面的正则表达式API之一,而且它与Perl5正则表达式完全兼容。
另外,它也是优化得最好的API之一。
Jakarta-ORO库以前叫做OROMatcher,Daniel Savarese大方地把它赠送给了Jakarta Project。
你可以按照本文最后参考资源的说明下载它。
我首先将简要介绍使用Jakarta-ORO库时你必须创建和访问的对象,然后介绍如何使用Jakarta-ORO API。
▲PatternCompiler对象首先,创建一个Perl5Compiler类的实例,并把它赋值给PatternCompiler接口对象。
Perl5Compiler是PatternCompiler接口的一个实现,允许你把正则表达式编译成用来匹配的Pattern对象。
▲Pattern对象要把正则表达式编译成Pattern对象,调用compiler对象的compile()方法,并在调用参数中指定正则表达式。
例如,你可以按照下面这种方式编译正则表达式“t[aeio]n”:默认情况下,编译器创建一个大小写敏感的模式(pattern)。
因此,上面代码编译得到的模式只匹配“tin”、“tan”、“ten”和“ton”,但不匹配“Tin”和“taN”。
要创建一个大小写不敏感的模式,你应该在调用编译器的时候指定一个额外的参数:创建好Pattern对象之后,你就可以通过PatternMatcher类用该Pattern对象进行模式匹配。
▲PatternMatcher对象PatternMatcher对象根据Pattern对象和字符串进行匹配检查。
你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。
Perl5Matcher类是PatternMatcher接口的一个实现,它根据Perl5正则表达式语法进行模式匹配:使用PatternMatcher对象,你可以用多个方法进行匹配操作,这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串:·boolean matches(String input,Pattern pattern):当输入字符串和正则表达式要精确匹配时使用。
换句话说,正则表达式必须完整地描述输入字符串。
·boolean matchesPrefix(String input,Pattern pattern):当正则表达式匹配输入字符串起始部分时使用。
·boolean contains(String input,Pattern pattern):当正则表达式要匹配输入字符串的一部分时使用(即,它必须是一个子串)。
另外,在上面三个方法调用中,你还可以用PatternMatcherInput对象作为参数替代String对象;这时,你可以从字符串中最后一次匹配的位置开始继续进行匹配。
当字符串可能有多个子串匹配给定的正则表达式时,用PatternMatcherInput对象作为参数就很有用了。
用PatternMatcherInput对象作为参数替代String时,上述三个方法的语法如下:·boolean matches(PatternMatcherInput input,Pattern pattern)·boolean matchesPrefix(PatternMatcherInput input,Pattern pattern)·boolean contains(PatternMatcherInput input,Pattern pattern)三、应用实例下面我们来看看Jakarta-ORO库的一些应用实例。
3.1日志文件处理任务:分析一个Web服务器日志文件,确定每一个用户花在网站上的时间。
在典型的BEA WebLogic日志文件中,日志记录的格式如下:分析这个日志记录,可以发现,要从这个日志文件提取的内容有两项:IP地址和页面访问时间。
你可以用分组符号(圆括号)从日志记录提取出IP地址和时间标记。
首先我们来看看IP地址。
IP地址有4个字节构成,每一个字节的值在0到255之间,各个字节通过一个句点分隔。
因此,IP地址中的每一个字节有至少一个、最多三个数字。
图八显示了为IP地址编写的正则表达式:图八:匹配IP地址IP地址中的句点字符必须进行转义处理(前面加上“\”),因为IP地址中的句点具有它本来的含义,而不是采用正则表达式语法中的特殊含义。
句点在正则表达式中的特殊含义本文前面已经介绍。
日志记录的时间部分由一对方括号包围。
你可以按照如下思路提取出方括号里面的所有内容:首先搜索起始方括号字符(“[”),提取出所有不超过结束方括号字符(“]”)的内容,向前寻找直至找到结束方括号字符。
图九显示了这部分的正则表达式。
图九:匹配至少一个字符,直至找到“]”现在,把上述两个正则表达式加上分组符号(圆括号)后合并成单个表达式,这样就可以从日志记录提取出IP地址和时间。
注意,为了匹配“--”(但不提取它),正则表达式中间加入了“\s-\s-\s”。
完整的正则表达式如图十所示。
图十:匹配IP地址和时间标记现在正则表达式已经编写完毕,接下来可以编写使用正则表达式库的Java代码了。
为使用Jakarta-ORO库,首先创建正则表达式字符串和待分析的日志记录字符串:这里使用的正则表达式与图十的正则表达式差不多完全相同,但有一点例外:在Java中,你必须对每一个向前的斜杠(“\”)进行转义处理。
图十不是Java的表示形式,所以我们要在每个“\”前面加上一个“\”以免出现编译错误。