JAVA+正则表达式+(超详细)
- 格式:doc
- 大小:155.00 KB
- 文档页数:37
Java的正则表达式是一种强大的工具,可以用于处理字符串模式匹配和替换等操作。
在Java 中,正则表达式被定义在java.util.regex包中,主要包括Pattern和Matcher两个类。
下面是一些基本的Java正则表达式用法:Pattern和Matcher类Pattern类用于编译正则表达式,而Matcher类用于对给定的输入字符串执行匹配操作。
Pattern pattern = pile("abc"); // 编译正则表达式Matcher matcher = pattern.matcher("hello abc world"); // 创建匹配器boolean matches = matcher.matches(); // 进行匹配使用字符类使用字符类(如[a-z],[A-Z],[0-9]等)来匹配一组字符。
Pattern pattern = pile("[a-z]+");Matcher matcher = pattern.matcher("hello world");boolean matches = matcher.matches(); // 返回true使用元字符使用元字符(如.、*、+、?、^、$等)来匹配更复杂的模式。
Pattern pattern = pile(".at"); // 匹配任意字符后面跟着'at'的字符串Matcher matcher = pattern.matcher("hat at cat"); // 在"hat at cat"中匹配得到"hat at" 预定义模式Java提供了一些预定义的模式类,如Pattern.CASE_INSENSITIVE,Pattern.MULTILINE等,可以用于修改匹配的模式。
java 整数正则表达式
Java中的整数正则表达式指的是可以匹配整数的正则表达式。
在Java中,我们可以使用正则表达式来验证用户输入的整数是否符合我们的要求,例如:是否为正整数,是否为负整数,是否为零等。
下面是一些常用的Java整数正则表达式:
1、验证正整数:^[1-9]d*$
2、验证负整数:^-[1-9]d*$
3、验证整数:^-?[1-9]d*$
4、验证非负整数(正整数 + 0):^[1-9]d*|0$
5、验证非正整数(负整数 + 0):^-[1-9]d*|0$
6、验证数字:^[0-9]*$
7、验证大于等于0且小于等于100的整数:^(0|[1-9]d?|100)$
8、验证大于等于0且小于等于99的整数:^(0|[1-9]d?|99)$
以上是一些常用的Java整数正则表达式,我们可以根据具体需求进行选择和修改。
在实际应用中,我们可以使用Java自带的正则表达式工具类或第三方工具类如Apache Commons Lang库的StringUtils类来进行正则表达式的匹配和处理。
- 1 -。
如果你曾经用过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 方括号符号为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。
java匹配数字的正则表达式
可以使用以下正则表达式来匹配数字:
- 匹配整数和小数:
java
String regex = "[+-]?(\\d+(\\.\\d*)? \\.\\d+)";
这个正则表达式将匹配包括整数和小数在内的所有数字。
匹配规则如下:
- 可以以正号或负号开头,也可以没有符号。
- 整数部分可以是一个或多个数字,小数部分可以是零个或多个数字,小数点是可选的。
- 如果小数点存在,则必须有至少一个数字紧随其后。
- 匹配正整数:
java
String regex = "[+]?\\d+";
- 可以有一个正号,也可以没有符号。
- 整数部分必须是一个或多个数字。
- 匹配负整数:
java
String regex = "-\\d+";
这个正则表达式将匹配所有的负整数,不包括零。
匹配规则如下:
- 必须以负号开头。
- 整数部分必须是一个或多个数字。
- 匹配非负整数(包括零):
java
String regex = "\\d+";
- 整数部分必须是一个或多个数字。
- 匹配非正整数(包括零):
java
String regex = "-?\\d+";
这个正则表达式将匹配所有的非正整数,包括零和负整数。
匹配规则如下:
- 可以有一个负号,也可以没有符号。
- 整数部分必须是一个或多个数字。
java正则表达式详解Java正则表达式详解Java正则表达式教程 [1]Regular Expressions of Java Tutorial 译者序正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不到的作用。
正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率。
正则表达式应用于程序设计语言中,首次是出现在 Perl 语言,这也让 Perl 奠定了正则表达式旗手的地位。
现在,它已经深入到了所有的程序设计语言中,在程序设计语言中,正则表达式可以说是标准配置了。
Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了Java 中的基本类库,使用时不需要再导入第三方的类库了。
Java 正则表达式的语法来源于象征着正则表达式标准的 Perl 语言,但也不是完全相同的,具体的可以参看 Pattern 类的 API 文档说明。
我在一次偶然中发现了位于 站点上的 Java Tutorial,也在那里看到了关于 Java 的正则表达式教程,感觉它不同于其他的正则表达式教程,文中以大量的匹配实例来进行说明。
为了能让 Java 学习者能更好地使用正则表达式,就将其完整地译出了。
该教程中所介绍的正则表达式应用仅仅是最为简单的(并没有完全地涉及到 Pattern 类支持的所有正则表达式语法,也没有涉及到高级的应用),适合于从未接触过或者是尚未完全明白正则表达式基础的学习者。
在学习完该教程后,应该对正则表达式有了初步的了解,并能熟练地运用java.util.regex 包中的关于正则表达式的类库,为今后学习更高级的正则表达式技术奠定良好的基础。
教程中所有的源代码都在 src 目录下,可以直接编译运行。
由于当前版本的Java Tutorial 是基于 JDK 6.0 的,因此其中的示例程序也用到了 JDK 6.0 中的新增类库,但正则表达式在 JDK 1.4 就已经存在了,为了方便大家使用,改写了部分的源代码,源代码类名中后缀为“V4”的表示用于 JDK 1.4 或以上版本,“V5”的表示用于 JDK 5.0 或以上版本,没有这些后缀的类在各个版本中均可以正常使用。
Java正则表达式详解正则表达式(Regular Expression)又称正规表示法、常规表示法,在代码中常简写为regex、regexp 或RE,它是计算机科学的一个概念。
正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作,是一种可以用于模式匹配和替换的规范。
一个正则表达式就是由普通的字符(如字符a~z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。
String 类里也提供了如下几个特殊的方法。
•boolean matches(String regex):判断该字符串是否匹配指定的正则表达式。
•String replaceAll(String regex, String replacement):将该字符串中所有匹配regex 的子串替换成replacement。
•String replaceFirst(String regex, String replacement):将该字符串中第一个匹配regex 的子串替换成replacement。
•String[] split(String regex):以regex 作为分隔符,把该字符串分割成多个子串。
上面这些特殊的方法都依赖于Java提供的正则表达式支持,除此之外,Java 还提供了Pattern 和Matcher 两个类专门用于提供正则表达式支持。
很多读者都会觉得正则表达式是一个非常神奇、高级的知识,其实正则表达式是一种非常简单而且非常实用的工具。
正则表达式是一个用于匹配字符串的模板。
实际上,任意字符串都可以当成正则表达式使用。
例如“abc”,它也是一个正则表达式,只是它只能匹配“abc”字符串。
如果正则表达式仅能匹配“abc”这样的字符串,那么正则表达式也就不值得学习了。
正则表达式作为一个用于匹配字符串的模板,将某个字符模式与所搜索的字符串进行匹配。
本文简单了解一下如何使用正则表达式来操作字符串。
java正则表达式(内附例⼦)正则表达式 定义:正则表达式,⼜称规则表达式。
(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的⼀个概念。
正则表达式通常被⽤来检索、替换那些符合某个模式(规则)的⽂本。
概念:正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑。
⽬的:给定⼀个正则表达式和另⼀个字符串,我们可以达到如下的⽬的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
特点:正则表达式的特点是: 1. 灵活性、逻辑性和功能性⾮常强; 2. 可以迅速地⽤极简单的⽅式达到字符串的复杂控制。
3. 对于刚接触的⼈来说,⽐较晦涩难懂。
4、由于正则表达式主要应⽤对象是⽂本,因此它在各种⽂本编辑器场合都有应⽤,⼩到著名编辑器EditPlus,⼤到MicrosoftWord、Visual Studio等⼤型编辑器,都可以使⽤正则表达式来处理⽂本内容。
元字符 要想真正的⽤好正则表达式,正确的理解元字符是最重要的事情。
下表列出了所有的元字符和对它们的⼀个简短的描述。
元字符描述\将下⼀个字符标记符、或⼀个向后引⽤、或⼀个⼋进制转义符。
例如,“\\n”匹配\n。
“\n”匹配换⾏符。
序列“\\”匹配“\”⽽“\(”则匹配“(”。
即相当于多种编程语⾔中都有的“转义字符”的概念。
^匹配输⼊字⾏⾸。
如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$匹配输⼊⾏尾。
如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
*匹配前⾯的⼦表达式任意次。
例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。
正则表达式(java)规则⼤全⼀、校验数字的表达式1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 ⾄少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和⾮零开头的数字:^(0|[1-9][0-9]*)$6 ⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位⼩数的正数或负数:^(\-)?\d+(\.\d{1,2})?$8 正数、负数、和⼩数:^(\-|\+)?\d+(\.\d+)?$9 有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$10 有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$11 ⾮零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$12 ⾮零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$13 ⾮负整数:^\d+$ 或 ^[1-9]\d*|0$14 ⾮正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$15 ⾮负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$16 ⾮正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$⼆、校验字符的表达式1 汉字:^[\u4e00-\u9fa5]{0,}$2 英⽂和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$3 长度为3-20的所有字符:^.{3,20}$4 由26个英⽂字母组成的字符串:^[A-Za-z]+$5 由26个⼤写英⽂字母组成的字符串:^[A-Z]+$6 由26个⼩写英⽂字母组成的字符串:^[a-z]+$7 由数字和26个英⽂字母组成的字符串:^[A-Za-z0-9]+$8 由数字、26个英⽂字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$9 中⽂、英⽂、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$10 中⽂、英⽂、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$11 可以输⼊含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+12 禁⽌输⼊含有~的字符:[^~\x22]+三、特殊需求表达式1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?3 InternetURL:[a-zA-z]+://[^\s]* 或 ^https://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$4 ⼿机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$6 国内电话号码(0511-*******、021-********):\d{3}-\d{8}|\d{4}-\d{7}7 ⾝份证号:15或18位⾝份证:^\d{15}|\d{18}$15位⾝份证:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$18位⾝份证:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$8 短⾝份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$11 强密码(必须包含⼤⼩写字母和数字的组合,不能使⽤特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$12 ⽇期格式:^\d{4}-\d{1,2}-\d{1,2}13 ⼀年的12个⽉(01~09和1~12):^(0?[1-9]|1[0-2])$14 ⼀个⽉的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$15 钱的输⼊格式:16 1.有四种钱的表⽰形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$17 2.这表⽰任意⼀个不以0开头的数字,但是,这也意味着⼀个字符"0"不通过,所以我们采⽤下⾯的形式:^(0|[1-9][0-9]*)$18 3.⼀个0或者⼀个不以0开头的数字.我们还可以允许开头有⼀个负号:^(0|-?[1-9][0-9]*)$19 4.这表⽰⼀个0或者⼀个可能为负的开头不为0的数字.让⽤户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下⾯我们要加的是说明可能的⼩数部分:^[0-9]+(.[0-9]+)?$20 5.必须说明的是,⼩数点后⾯⾄少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$21 6.这样我们规定⼩数点后⾯必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$22 7.这样就允许⽤户只写⼀位⼩数.下⾯我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$23 8.1到3个数字,后⾯跟着任意个逗号+3个数字,逗号成为可选,⽽不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$24 备注:这就是最终结果了,别忘了"+"可以⽤"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在⽤函数时去掉去掉那个反斜杠,⼀般的错误都在这⾥25 xml⽂件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$26 中⽂字符的正则表达式:[\u4e00-\u9fa5]27 双字节字符:[^\x00-\xff] (包括汉字在内,可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1))28 空⽩⾏的正则表达式:\n\s*\r (可以⽤来删除空⽩⾏)29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> (⽹上流传的版本太糟糕,上⾯这个也仅仅能部分,对于复杂的嵌套标记依旧⽆能为⼒)30 ⾸尾空⽩字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式)31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有⽤)。
Java的正则表达式讲解:(为了能看清,本文正则表达式用中文的句号代替英文句点)1英文句点符号:匹配单个任意字符。
eg:表达式”t。
o 可以匹配:tno,t#o,teo等等。
不可以匹配:tnno,to,Tno,t正o等。
2方括号:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。
eg:表达式:t[abcd]n 只可以匹配:tan,tbn,tcn,tdn。
不可以匹配:thn,tabn,tn等。
3 | 符号。
相当与“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。
eg:表达式:t(a|b|c|dd)n 只可以匹配:tan,tbn,tcn,tddn。
不可以匹配taan,tn,tabcn 4表示匹配次数的符号{n,}表示至少N次。
eg:表达式:[0—9]{ 3 } \—[0-9]{ 2 } \—[0-9]{ 3 } 的匹配格式为:999—99—999因为“—”符号在正则表达式中有特殊的含义,它表示一个范围,所以在前面加转义字符“\”。
5^符号:表示否^符号被称为“否”符号,如果用在方括号内,“^“表示不想匹配的字符。
eg:表达式:[^x] 第一个字符不能是x6:圆括号,和空白符号“\s”是空白符号,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格。
()是分组号,可以用ORO API提取处出值,后面将详细讨论。
7:正则表达式的一些快捷符号:\d表示[0—9],\D表示[^0—9],\w表示[0—9A—Z_a—z],\W表示[^0—9A—Z_a—z],\s表示[\t\n\r\f], \S表示[^\t\n\r\f]8 一些常用的正则表达式:Java:(([a-z]|_)(\\w*)){6,20}匹配以字母或下划线开头,字母数字下划线结尾的字符串JavaScript:/^(\-?)(\d+)$/匹配数字。
/^\w+$/匹配字母数字下划线。
.+ 一个或多个字符/0 第一次匹配的字符串9java类中使用正则表达式:eg1:Pattern p = pile("t.n");Matcher m = p.matcher(“ton”);if(m.matches()){return true;}eg2:boolean bool=Pattern.matches (“t.n”,”ton”);如果一个正则表达式要重复利用,用第一种,如果只匹配一次,第二种是最佳选择。
JAVA正则表达式概括1、三大类Java.util.regex由三大类组成,Pattern、Matcher和PatternSyntaxException。
Patter patn = pile(String strPatn);Matcher matr = patn.matcher(String strMatr);2、元字符() 构建组[] 单个字符选择{} 匹配次数{n,m} - 至^ 非&& 或+ 1次或多次* 0次或多次? 0或1次贪婪X?,X*,X+勉强X??,X*?,X+? 侵占X?+,X*+,X++\ 转义字符3、预定义字符类\d 数字\D 非数字\s 空白字符\S 非空白字符\w 单词字符\W 非单词字符4、编号方式与反向引用用()表示一个组,标号从外向里,从左向右,由1开始递增,且0表示整个表达式。
如Z((A)(B(C)))中,0表示:Z((A)(B(C)));1表示:((A)(B(C)));2表示:(A);3表示:(B(C));4表示:(C)。
使用反斜线(\)后跟一个表示需要在调用组号的数字表示。
如(\\d\\d)\\1可匹配1212。
5、边界匹配器^ 行首$ 行尾\b 单词边界\B 非单词边界\A 输入的开头\G 上一个匹配的结尾\Z 输入的结尾,仅用于最后的结束符\z 输入的结尾6、Pattern类构建Pattern. 内至意义CANON_EQ 无当且仅当在其完整的规范分解匹配时,两个字符被视为匹配CASE_INSENSITIVE (?i) 启用不区分大小写匹配COMMENTS (?x) 模式中允许存在空白和注释,空白和以#开始的直到行尾的内嵌注释会被忽略DOTALL (?s) 表达式.匹配包括行结束符在内的任意字符LITERAL 无模式的输入字符串作为字面上的字符序列来对待,输入序列中的元字符和转义字符不具有特殊的意义MULTILINE (?m) 表达式^和$分别匹配输入序列行结束符前面和行结束符的前面UNICODE_CASE (?u) 启用可折叠感知 Unicode(Unicode-aware casefolding)大小写UNIX_LINES (?d) 在这种模式下,.、^和$的行为仅识别“\n”的行结束符7、Matcher常见方法Pattern pile(str) 构造Pattern类patnmatch(str) 构造相匹配的Match类match(strPatn,strMatr) 快速检测是否完全匹配split(strInpt) 用strPatn对strInpt分隔返回Str数组matrint start() 返回之前匹配的开始索引int start(int group)返回之前匹配操作中通过给定组所捕获序列的开始索引int end() 返回最后匹配字符后的偏移量int end(int group)返回之前匹配操作中通过给定组所捕获序列的最后字符之后的偏移量int group(int group) 返回给定组捕获的子序列String int gourpCount() 返回int型当前捕获组的数量boolean find()尝试地寻找输入序列中,匹配模式的下一个子序列,成功返回true,否则false boolean lookingAt():尝试从区域开头处开始,输入序列与该模式匹配boolean find(int start)重置匹配器,然后从指定的索引处开始,尝试地寻找输入序列中,匹配模式的下一个子序列boolean matches() 尝试将整个区域与模式进行匹配public Matcher appendReplacement(StringBuffer sb, String replacement):实现非结尾处的增加和替换操作。
JAVA 正则表达式(超详细)本文来自CSDN博客,转载请标明出处:/allwefantasy/archive/2008/10/25/3136570.aspx< src="/js/LoadFeedbackCount.js" type=text/javascript>____---------------------------________________(PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可以说是学习JAVA正则表达的必读篇。
作者是个正真有功力的人,阅读愉快)<>functionStorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:' '):(d.getSelection?d.getSelection():'');void(keyit=window.open('/storeit.as px?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width =475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。
可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。
正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。
在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。
正则表达式的引擎已被许多普通的Unix工具所实现,包括grep,awk,vi和Emacs等。
此外,许多使用比较广泛的脚本语言也支持正则表达式,比如Python,Tcl,JavaScript,以及最著名的Perl。
我很早以前就是个Perl方面的黑客,如果你和我一样话,你也会非常依赖你手边的这些强大的text-munging工具。
近几年来,像其他程序开发者一样,我也越来越关注Java的开发。
Java作为一种开发语言,有许多值得推荐的地方,但是它一直以来没有自带对正则表达式的支持。
直到最近,借助于第三方的类库,Java开始支持正则表达式,但这些第三方的类库都不一致、兼容性差,而且维护代码起来很糟糕。
这个缺点,对我选择Java作为首要的开发工具来说,一直是个巨大的顾虑之处。
你可以想象,当我知道Sun的Java JDK 1.40版本包含了java.util.regex(一个完全开放、自带的正则表达式包)时,是多么的高兴!很搞笑的说,我花好些时间去挖掘这个被隐藏起来的宝石。
我非常惊奇的是,Java这样的一个很大改进(自带了java.util.regex包)为什么不多公开一点呢?!最近,Java双脚都跳进了正则表达式的世界。
java.util.regex包在支持正则表达也有它的过人之处,另外Java也提供详细的相关说明文档。
使得朦朦胧胧的regex神秘景象也慢慢被拨开。
有一些正则表达式的构成(可能最显著的是,在于糅合了字符类库)在Perl都找不到。
在regex包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。
Pattern类是用来表达和陈述所要搜索模式的对象,Matcher类是真正影响搜索的对象。
另加一个新的例外类,PatternSyntaxException,当遇到不合法的搜索模式时,会抛出例外。
即使对正则表达式很熟悉,你会发现,通过java使用正则表达式也相当简单。
要说明的一点是,对那些被Perl的单行匹配所宠坏的Perl狂热爱好者来说,在使用java的regex 包进行替换操作时,会比他们所以前常用的方法费事些。
本文的局限之处,它不是一篇正则表达式用法的完全教程。
如果读者要对正则表达进一步了解的话,推荐阅读Jeffrey Frieldl的Mastering Regular Expressions,该书由O’Reilly出版社出版。
我下面就举一些例子来教读者如何使用正则表达式,以及如何更简单地去使用它。
设计一个简单的表达式来匹配任何电话号码数字可能是比较复杂的事情,原因在于电话号码格式有很多种情况。
所有必须选择一个比较有效的模式。
比如:(212) 555-1212,212-555-1212和212 555 1212,某些人会认为它们都是等价的。
首先让我们构成一个正则表达式。
为简单起见,先构成一个正则表达式来识别下面格式的电话号码数字:(nnn)nnn-nnnn。
第一步,创建一个pattern对象来匹配上面的子字符串。
一旦程序运行后,如果需要的话,可以让这个对象一般化。
匹配上面格式的正则表达可以这样构成:(\d{3})\s\d{3}-\d{4},其中\d单字符类型用来匹配从0到9的任何数字,另外{3}重复符号,是个简便的记号,用来表示有3个连续的数字位,也等效于(\d\d\d)。
\s也另外一个比较有用的单字符类型,用来匹配空格,比如Space键,tab键和换行符。
是不是很简单?但是,如果把这个正则表达式的模式用在java程序中,还要做两件事。
对java的解释器来说,在反斜线字符(\)前的字符有特殊的含义。
在java中,与regex有关的包,并不都能理解和识别反斜线字符(\),尽管可以试试看。
但为避免这一点,即为了让反斜线字符(\)在模式对象中被完全地传递,应该用双反斜线字符(\)。
此外圆括号在正则表达中两层含义,如果想让它解释为字面上意思(即圆括号),也需要在它前面用双反斜线字符(\)。
也就是像下面的一样:\\(\\d{3}\\)\\s\\d{3}-\\d{4}现在介绍怎样在java代码中实现刚才所讲的正则表达式。
要记住的事,在用正则表达式的包时,在你所定义的类前需要包含该包,也就是这样的一行:import java.util.regex.*;下面的一段代码实现的功能是,从一个文本文件逐行读入,并逐行搜索电话号码数字,一旦找到所匹配的,然后输出在控制台。
BufferedReader in;Pattern pattern = pile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");in = new BufferedReader(new FileReader("phone"));String s;while ((s = in.readLine()) != null){Matcher matcher = pattern.matcher(s);if (matcher.find()){System.out.println(matcher.group());}}in.close();对那些熟悉用Python或Javascript来实现正则表达式的人来说,这段代码很平常。
在Python和Javascript这些语言中,或者其他的语言,这些正则表达式一旦明确地编译过后,你想用到哪里都可以。
与Perl的单步匹配相比,看起来多多做了些工作,但这并不很费事。
find()方法,就像你所想象的,用来搜索与正则表达式相匹配的任何目标字符串,group()方法,用来返回包含了所匹配文本的字符串。
应注意的是,上面的代码,仅用在每行只能含有一个匹配的电话号码数字字符串时。
可以肯定的说,java的正则表达式包能用在一行含有多个匹配目标时的搜索。
本文的原意在于举一些简单的例子来激起读者进一步去学习java 自带的正则表达式包,所以对此就没有进行深入的探讨。
这相当漂亮吧! 但是很遗憾的是,这仅是个电话号码匹配器。
很明显,还有两点可以改进。
如果在电话号码的开头,即区位号和本地号码之间可能会有空格。
我们也可匹配这些情况,则通过在正则表达式中加入\s?来实现,其中?元字符表示在模式可能有0或1个空格符。
第二点是,在本地号码位的前三位和后四位数字间有可能是空格符,而不是连字号,更有胜者,或根本就没有分隔符,就是7位数字连在一起。
对这几种情况,我们可以用(-|)?来解决。
这个结构的正则表达式就是转换器,它能匹配上面所说的几种情况。
在()能含有管道符|时,它能匹配是否含有空格符或连字符,而尾部的?元字符表示是否根本没有分隔符的情况。
最后,区位号也可能没有包含在圆括号内,对此可以简单地在圆括号后附上?元字符,但这不是一个很好的解决方法。
因为它也包含了不配对的圆括号,比如"(555" 或"555)"。
相反,我们可以通过另一种转换器来强迫让电话号码是否带有有圆括号:(\(\d{3}\)|\d{3})。
如果我们把上面代码中的正则表达式用这些改进后的来替换的话,上面的代码就成了一个非常有用的电话号码数字匹配器:Pattern pattern =pile("(\\(\\d{3}\\)|\\d{3})\\s?\\d{3}(-|)?\\d{4}");可以确定的是,你可以自己试着进一步改进上面的代码。
现在看看第二个例子,它是从Friedl的中改编过来的。
其功能是用来检查文本文件中是否有重复的单词,这在印刷排版中会经常遇到,同样也是个语法检查器的问题。
匹配单词,像其他的一样,也可以通过好几种的正则表达式来完成。
可能最直接的是\b\w+\b,其优点在于只需用少量的regex元字符。
其中\w元字符用来匹配从字母a到u的任何字符。
+元字符表示匹配匹配一次或多次字符,\b元字符是用来说明匹配单词的边界,它可以是空格或任何一种不同的标点符号(包括逗号,句号等)。
现在,我们怎样来检查一个给定的单词是否被重复了三次?为完成这个任务,需充分利用正则表达式中的所熟知的向后扫描。
如前面提到的,圆括号在正则表达式中有几种不同的用法,一个就是能提供组合类型,组合类型用来保存所匹配的结果或部分匹配的结果(以便后面能用到),即使遇到有相同的模式。
在同样的正则表达中,可能(也通常期望)不止有一个组合类型。
在第n个组合类型中匹配结果可以通过向后扫描来获取到。
向后扫描使得搜索重复的单词非常简单:\b(\w+)\s+\1\b。
圆括号形成了一个组合类型,在这个正则表示中它是第一组合类型(也是仅有的一个)。