黑马程序员_正则表达式

来源:互联网 发布:js获取li标签的属性值 编辑:程序博客网 时间:2024/06/02 11:21

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

正则表达式

正则表达式就是符合一定规则的表达式。
作用:用于专门操作字符串的规则(操作字符串不是有String类吗因为String类中的方法操作字符串过于简单,但要组合操作字符串又过于复杂,所以通过正则表达式更容易些)


特点:用一些特定的符号表示一些代码的操作,这样就能简化书写,所以学习正则表达式就是在学习一些特殊符号的使用,API java.util.regex包中Pattern类有详细的定义。


正则表达式的小应用——判断QQ号
需求:判断QQ号,该QQ号5~15位 0不能开头 只能是数字
思路:在String中有一个方法 boolean matches(String regex) 参数是一个正则表达式,所以我们定义一个正则表达式即可。
public static void qqJiancha(String str){String regex = "[1-9] [0-9] {4,14}";//该语句就是正则表达式规则意思是:第一位是1到9的数字 第二位是0到9的数字后面是第二位出现的次数,最少4次最多14次。如果任意条件不满足则返回false。if(str.matchaes(regex))System.out.println("QQ号正确");elseSystem.out.println("QQ号错误");} 


         

正则表达式的使用

1、匹配

通过String类中的方法 boolean matches(String regex) 用规则匹配整个字符串,只要有一处不符合规则就匹配结束并返回false。
在正则中

[abc]可用于判断字符串中某一个位置上出现的字符,要么是a要么是b要么是c,只能有一个字符
[^abc] 除了abc以外的任意字符
[a-zA-Z] 小写a到z或者大写A到Z
\d 代表0到9数字等同于[0-9],但在写正则是应写成"\\d"因为\本身是转义字符,所以在正则中\是成对
. 点 代表任意字符
Greedy 数量词X代表正则
X? X,一次或一次也没有 // eg :regex = "[a-z] \\d ?";第一位是a~z第二位是数字但可能有1次也可能没有
X* X,零次或多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
 

2、切割

通过String类中的方法String[ ] split(String regex)
按照叠词(后一个和前一个一样的词)进行切割
正则写法:regex = "(.)\\1";//该语句用到了组,意思是第一位是任意字符而第二位和第一位一样。为了可以让规则的结果被重用可以将规则封装成组用()完成,组的出现都有编号,从1开始想要使用已有组可以通过\\n的形式来获取,其中n是组的编号。如果会出现多次可以在后面写个+号,即regex = "(.)\\1+"。((())())问几组看有几个左括号。

3、替换
通过String类中的方法String  replaceAll(String regex, String replacement)
eg:将字符串中的数字替换成#号 sfsf43346365ghfh
replaceAll( "\\d{5,}","#")//数字出现5个或5个以上的就替换成#
eg:将叠词替换成单个字母 sadaddddddfdseee
replaceAll( "(.)\\1+","$1")//将叠词替换成一个,$1是获取组第一组。

4、获取

就是将字符串中符合规则的规则的子串取出来
步骤:
1、将正则表达式封装成对象
2、让正则对象和要操作的字符串相关联
3、关联后获取一个正则匹配引擎
4、通过引擎对符合规则的字符串进行操作比如取出
import java.util.regex.*;class GetString {public static void main(String[] args) {String s = "hei ma  wo lai la ,deng zhe wo o ga yo ji";String regex = "\\b[a-z]{2}\\b";regexString(s, regex);}public static void regexString(String s, String regex) {// 将正则表达式封装成对象Pattern p = Pattern.compile(regex);// 将正则表达式与字符串相关联,并获取引擎MatcherMatcher m = p.matcher(s);// 通过引擎Matcher中的find()方法对字符串进行匹配// 通过group()方法获取匹配后的结果while (m.find()) {System.out.println("m.group()" + m.group());}}/* * static Pattern compile(String regex) :将给定的正则表达式编译到模式中。 Matcher * matcher(CharSequence input) :创建匹配给定输入与此模式的匹配器。 boolean find() * :尝试查找与该模式匹配的输入序列的下一个子序列。 String group() :返回由以前匹配操作所匹配的输入子序列。 */}

怎么选择正则表达式的功能
思考方式:
1、如果只想知道该字符串是否对错,使用匹配。
2、想要将已有的字符串转换成另一个字符串,使用替换。
3、想要按照自定义的方式将字符变成多个字符串,使用切割
4、想要拿到符合需求的字符串子串,使用获取


正则表达式小练习

class Test1 {public static void main(String[] args) {//将字符串转换成“我要学编程”//将已有字符串转换成另一个字符串 使用替换功能String str ="我我...我我....我我.........我要要...学学学.......学...编编编....程程";String regex = "\\.+";//将字符串中的.替换成“”String str1 = str.replaceAll(regex,"");//通过引用组,将叠词替换成一个词String str2 = str1.replaceAll("(.)\\1+","$1");System.out.println("结果是:"+str2);}}




----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

0 0
原创粉丝点击