正则化表达式 Regular Expression


0.应用场景

1)验证:进行电话号码、邮箱用户名、密码的格式验证

2)查找:查找url等

3)替换:匹配替换一条龙

 

1.基础概念:匹配规则

\w    ==》匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\d ==》匹配数字[0-9] [\s\S] \s 是匹配所有空白符,相当于[\r\t\n\f]。\S 非空白符,不包括换行。
^ ^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用 ^ 时,它表示"非"或"排除"的意思 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 { 标记限定符表达式的开始。要匹配 {,请使用 \{。 [ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,
'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。 | 指明两项之间的一个选择。要匹配 |,请使用 \|* 匹配前面的子表达式0-n次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 + 匹配前面的子表达式1-n次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 ? 匹配前面的子表达式0-1次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。

 

 例子:

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

2.一个科学计数法匹配的例子

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

public class Solution {//比较死板的规则可以用正则化表达式,如果过于复杂就要写if else for的语句了
    public boolean isNumeric(char[] str) {
        String s = String.valueOf(str);//String.valueOf()将字符数组转为String //不是s.valueOf()而且此时没有s的值
        return s.matches("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?");//正则表达式 //别忘了双引号"",因为s匹配的是字符串
    }
}//时间O(n)空间O(n)

//正则表达式:[]表示并列选其一;()表示同时全都要;   ?与[]、()同时使用,表示有/无
//d表示[0-9],要是需要字母直接写在[]里面,比如[d]表示'd';  \\d表示数字,因为是反斜杠转义;
//标点符号如:+-*/.等都要反斜杠\\来转义

 

 

3.使用代码 Pattern+Matcher

public class testObject {
    public static void main(String[] args) {
        String str = "这个是我的项目";
        String regEX="^[A-Za-z_\u4e00-\u9fa5][A-Za-z0-9_\u4e00-\u9fa5]*$"; //这里"\u4e00-\u9fa5"用于匹配汉字

        Pattern pattern = Pattern.compile(regEX);//记住Pattern和Matcher的组合
        Matcher matcher =pattern.matcher(str);
        
        boolean bool = matcher.find();
        System.out.println("bool = " + bool);
    }
}

 

 

深入学习看这篇:https://blog.csdn.net/cherrydreamsover/article/details/80941220

posted @ 2021-03-26 15:39  青杨风2199  阅读(113)  评论(0编辑  收藏  举报