正则表达式_小记

来源:互联网 发布:六壬排盘软件 编辑:程序博客网 时间:2024/06/07 19:41

正则表达式常用的语法:
A:字符
x 字符 x :任意的字符
\ 反斜线字符 在代码中书写正则表达式:——>用两个\代表一个反斜线
\t 制表符 (‘\u0009’)
\n 新行(换行)符 (‘\u000A’) IO流中要写入换行符号:windows “\r\n”
\r 回车符 (‘\u000D’)

B:字符类
[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可

C:预定义字符类

.           任何字符        邮箱里面:如果本身就是.,那么在写正在表达式的时候,\.将当前.转义\d          数字:[0-9]    \d在正则表达式应用的时候:[0-9]--->\\d\w          单词字符:[a-zA-Z_0-9]:简单一些字符串,单词字符(规则:数字或者字母)                javascript:[a-zA-Z0-9]

D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界 :

E:Greedy 数量词
X? X元素出现一次或一次也没有出现
X* X元素出现零次或多次
X+ X元素出现一次或多次
X{n} X,恰好产生n 次
X{n,} X,至少产生 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

正则表达式的应用,我们可以把字符串的判断用正则表达式来的替换之前的if判断句,然后减少代码量和代码冗余度。

例:判断一个QQ号的长度是否符合长度为5到10位,且首位不能为0的一个规则。

代码简写//符合长度在5到10位之间if(qq.length()>=5 && qq.length()<=10){            //符合第一个规则还要符合不能以0开头            if(!qq.startsWith("0")){                //这些QQ号码必须还数字的                //可以先将qq,转换成字符数字                char[] chs = qq.toCharArray() ;                //遍历字符数组,获取每一个字符                for(int x = 0 ; x < chs.length ; x ++){                    char ch = chs[x] ;                    //获取到每一个字符,判断该字符是否是数字                    if(!Character.isDigit(ch)){                        flag = false ;                        break ;                    }

我们用正则表达式的话,如下所示

/*//定义正则规则        //首位数字为19,后4位到后9位的数字为09        String regex = "[1-9][0-9]{4,9}" ;        判断正则表达式        //public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。         boolean flag = qq.matches(regex) ;        return flag ;*/
        正则表达式的简写        String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z]{2,3})+" ;        String regex = "\\w+@\\w{2,6}(\\.[a-zA-Z]{2,3})+" ;

由此看,正则表达式减少的代码量


String类的特有功能
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串,返回值类型是一个字符串数组类型
public String replaceAll(String regex,String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

package day13_ZZbiaoda;import javax.print.DocFlavor.STRING;/** * @author Aoman_Hao */public class Regex_Demo {     public static void main (String[] args){         String AA = "I thought RNG will win but it had lost!";         String blank_regex = " ";         //语法:public String[] split(String regex) 切割         String[] word = AA.split(blank_regex);         //循环输出          for (int i = 0; i < word.length; i++)                 System.out.println(word[i]);         System.out.println("----------------------------");         String BB = "qwer1234qwer456";         String num_regex = "\\d";//0到9的简写        //语法:public String replaceAll(String regex,String replacement) 替换         String BB_replace = BB.replaceAll(num_regex, "+");         System.out.println("修改后:"+BB_replace);     }     }输出:IthoughtRNGwillwinbutithadlost!----------------------------修改后:qwer++++qwer+++

public static Pattern compile(String regex)将给定的正则表达式编译成一个模式对象
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。 regex是自己定的正则表达式,使用方法:对象.matchs(regex)

package day13_ZZbiaoda;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @author Aoman_Hao */public class Regex_Demo2 {    public static void main(String[] args) {        //获得模式对象        Pattern regex = Pattern.compile("we*");        //获取匹配器对象,返回boolean类型数据        Matcher m = regex.matcher("weeeeeeeeee");        boolean flag = m.matches();        System.out.println("flag:"+flag);        ////////////////////////////////////        String regex1 = "we*";//正则规则        String name = "weeeeee";//指定字符串        //调用matcher方法,返回boolean类型值        boolean flag2 = name.matches(regex1);        System.out.println("flag2:"+flag2);    }}输出:flag:trueflag2:true
原创粉丝点击