正则表达式(十二)

来源:互联网 发布:淘宝旺铺店招 编辑:程序博客网 时间:2024/05/22 13:50

//工作忙,出差。断了些日子,今天开始接上。学正则表达式,正则表达式,很好玩。。。想想。。。编程应该也很好玩吧

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式:她描述了一个规则,通过这个规则可以匹配一类字符串。
 *         她是一种强大而灵活的文本处理工具(语言),大部分
 *         编程语言、数据库、文本编辑器、开发环境都支持正则表达式。
 * 学习:学习正则表达式,其实就是学习她的语法规则。
 * 一、
 * 1、普通字符:字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”,
 *   表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
 * 2、简单的转义字符:\n代表换行符
 *              \t制表符
 *              \\代表斜杠本身
 *              \^,\$,\+,\.,\(,等 匹配字符本身
 * 二、
 * 1、标准字符集合:能够与‘多种字符’匹配的表达式。注意区分大小写,大写是(小写)相反的意思。
 *   \d:任意一个数字,0-9中的任意一个
 *   \w:任意一个字母或数字或下划线,也就是:A-Z,a-z,0-9,_中任意一个
 *   \s:包括空格、制表符、换行符、等空白字符的其中任意一个
 *   .:小数点可以匹配任意一个字符(除换行符),
 *     如果匹配包括“\n”在内的所有字符,一般用[\s\S]  
 * 三、
 * 1、自定义字符集合:[]方括号匹配方式,能够匹配方括号中的任意一个字符。
 *              [abc@]:匹配a或b或c或@(方括号内是或的关系)  
 *              [^abc]:abc之外的任意一个字符(^取反的意思))   
 *              [a-z]:a到z之间的任意一个字母
 *              [^a-z0-8]:a到z,0到8之外的任意一个字符     
 *   说明:--正则表达式的特殊符号,被包含到方括号中,则失去特殊意义,出了 .(小数点),-(中划线)之外。           
 *       --标准字符集合,除小数点外,如果被包含于方括号中,自定义字符集合将包含该集合。比如:
 *       [\d.\-+]将匹配:数字、小数点、+、- 
 *四、
 *1、量词(Quantifier ['kwɑntɪfaɪɚ])
 *  --修饰匹配次数的特殊符号
 *    {n}:表达式重复n次
 *    {m,n}:表达式重复m次,最多n次
 *    {m,}:表达式至少重复m次
 *    ?:匹配表达是0次或者1次,相当于{0,1}。比如:a\d?b表示ab之间数字出现0到1次
 *    +:表达式至少出现1次,相当与{1,}。比如:a\d+b
 *    *:表达式不出现或出现任意次,相当于{0,} 。比如:a\d*b    
 *  --匹配次数中的贪婪模式(匹配字符越多越好,默认!)
 *  --匹配次数中的非贪婪模式(匹配字符越少越好,修饰匹配次数的特殊符号后再加上一个?号)  比如:\d{3,6}?(注意?在{}之后才有此种意义)
 * 五、
 * 1、字符边界
 * --本组标记匹配的不是字符而是位置,符合某种条件的位置。(零宽度)
 *   ^:与字符串开始的地方匹配
 *   $:与字符串结束的地方匹配
 *   \b:匹配一个单词的边界
 *   \b匹配这样一个位置:前面的字符和后面的字符不全是\w(意思就是:如果前面全是或者全不是,是不符合条件的)
 * 六、
 * 1、选择符和分组
 *  |:左右两边表达式之间“或”关系,匹配左边或右边
 *  ()捕获组:1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被休息
 *         2)取匹配结果的时候,括号中的表达式匹配到的内容可以单独得到
 *         3)每一个括号分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号
 *           ,捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的--文本。             
 *  (?:Expression)非捕获组: 一些表达式中不的不使用(),但又不需要保存()中子表达式匹配的内容,这时候可以使用
 *                非捕获组来抵消使用()带来的副作用。
 * 2、反向引用(\nnn)
 *   -每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。
 *   -通过反向引用,可以对分组已捕获的字符串经行引用。            
 * 七、
 * 1、预搜索(零宽断言)
 * -只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度。
 * -这个位置应该是符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配。
 * -正则表达式匹配过程中,如果子表达式匹配到的是字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子
 *  表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。
 *  占有字符还是零宽度,是针对匹配的内容是否保存到匹配结果中而言的。
 *  (?=exp):断言自身出现的位置的后面--能匹配表达式exp
 *  (?<=exp):断言自身出现的位置的前面面--能匹配表达式exp
 *  
 *  (?!exp):断言自身出现的位置的后面--不能匹配表达式exp
 *  (?<!exp):断言自身出现的位置的前面面--不能匹配表达式exp
 *  比如:[a-z]+(?=ing)  doing going(匹配的结果是:do,go)
 *              
 *              
 * 正则表达式在java中的应用
 * 相关类位于:java.util.regex包下面
 * --类:Pattern
 *      正则表达式的编译形式
 *      Pattern p=Pattern.complie(r,int);//建立正则表达式,并启动相应模式
 * --类:Matcher 
 *   通过解释Pattern对character sequence执行匹配操作的引擎
 *        Matcher m=p.matcher(str); //匹配str字符串                 
 *              
 */  
public class Regex {
public static void main(String[] args) {
//字符串 12345b6677,是否符合指定的正则表达式\d+
//表达式对象
Pattern p=Pattern.compile("\\d+");
//创建Matcher对象
Matcher m=p.matcher("12345b6677");//将整个字符串序列与该模式匹配
       //m.find();//匹配子序列
System.out.println(m.matches());
System.out.println(m.find());
System.out.println(m.group());//捕获组
}


}


原创粉丝点击