响度均衡

导航

 

 

基本语法 img img
^ 匹配字符串的开始 WHERE name REGEXP '^me'  
$ 匹配字符串的结束

WHERE name REGEXP 'd$'

 
. 匹配任意单个字符

WHERE name REGEXP '^..at'  ​  输出 : platinum 

匹配包含特定字符串的字符串WHERE name REGEXP 'in'输出 : platinum

 
[...] 匹配方括号内的任意一个字符

REGEXP '[0-9]' 数字 , 原字符中有数字即为true  

REGEXP '[a-z]' 任何字母[a-z0-9] 字母或数字 

 
[^...] 匹配除了方括号内所列字符之外的任意一个字符 否定④  
p1|p2|p3 选择性匹配,匹配p1、p2、p3 中的任意一个模式

REGEXP '^[aeiou]|d$'  

开头为aeiou中的一种或者以d结尾

 
* 匹配‘*’前面的子表达式零次或多次

select 'p' regexp 'pk*'; true

select 'pk' regexp 'pk*'; true

select 'pkkkkkkkkk##$#%#^' regexp 'pk*'; true

select 'tyu' regexp 'pk*'; false 

 
+ 匹配‘+’前面的子表达式一次或多次

select 'p' regexp 'pk+'; false

select 'pk' regexp 'pk+'; true

select 'pkkkkkkkkk##$#%#^' regexp 'pk+'; true 

 
?匹配'?'前面的字符最多一次

select 'color' regexp 'colou?r'; true

select 'colouur' regexp 'colou?r'; false 

 
{n}匹配前面的字符n次

select 'pkko' regexp 'pk{2}o'; true

select 'pkkkko' regexp 'pk{2}o'; false 

 
 {m,n} 匹配前面的子表达式最少m次,最多n次

select 'pkko' regexp 'pk{0,4}o'; true

select 'pkkkkko' regexp 'pk{0,4}o'; false

 
 

 

 
 贪婪匹配和非贪婪匹配 ?

匹配输入串A: 1001000100
贪婪匹配:
使用 1.*1 将会匹配到10010001
非贪婪匹配:
使用 1.*?1 将会匹配到1001

主要区别在于是否加?当?紧随任何其他限定符之后时,匹配模式是"非贪心的"。“非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。
 组捕获

 

 
( )

圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本

1、(abc)*表示这一组要么一起出现,要么不出现,出现那则按顺序出现

2、(abc|bcd|cde) 表示这一段是abc、bcd、cde三者之一,顺序也必须一致

3、(0-9)匹配’0-9’本身

4、(abc?) 表示匹配ab后面可以跟着一个或多个c ,例如匹配网址,可以用’(https?)'表示http开头 或 https 都可以匹配的到

5、{0-9}写法是错误的

 
? :
    public static void test5(){
        Pattern pattern = Pattern.compile("(?:\\d{4})-((\\d{2})-(\\d{2}))");
        Matcher m = pattern.matcher("2017-04-25");
        // 匹配的模式

        StringBuilder sb = new StringBuilder();
        //find()找到符合 regexp 的子字符串,这里匹配到了 2017-04-25
        while (m.find()) {
            //把带括号的存入group中,group(0)和m.group()结果一样,后续带括号的捕获组用group(i)获取
            for (int i = 0; i <= m.groupCount(); i++) {
                //System.out.println(m.groupCount());
                sb.append("组").append(i).append(" ");
                sb.append(m.group(i));
                sb.append(" ");
            }
        }
        System.out.println(sb.toString());//2017-04-12/04-12/04/


        // ?: 表示不存入捕获组中
        Pattern pattern1 = Pattern.compile("(\\d{4})-((\\d{2})-(\\d{2}))");
        Matcher m1 = pattern1.matcher("2017-04-25");
        /**
         *  ... 省略
         */
        //System.out.println(sb.toString());//2017-04-25/2017/04-25/04/
    }

?: 表示不存入捕获组中

group(0)和group()都代表匹配到的字符串,0 代表整个表达式

group(i) i>0 代表存放的组数据

[ ]

方括号[]是单个匹配 字符集/排除字符集/命名字符集

1、[0-3] 表示找到一个位置上的字符只能是0到3这四个数字,与(abc|bcd|cde)的作用比较类似,但圆括号可以匹配多个连续的字符 而一对方括号只能匹配单个字符

2、[^0-3] 表示找到这个位置上字符只能是除了0到3之外的所有字符

3、1,含义为以0-9中的数字为第一个数字开头

4、[\x{4e00}-\x{9fa5}a-zA-Z0-9] 匹配中文或26个大小写字母或0-9数字。

5、[0-9]{0,9} 表示长度为0到9的数字字符串 6、[(a)],会匹配(、a、)** 这三个字符

 
 

 

 
 find()
//find() 寻找符合 regexp 的子字符串,寻找到的可能有多个
    public static void test1(){
        Pattern compile = Pattern.compile("<.*?>");
        Matcher matcher = compile.matcher("<h1123>RUNOOB-菜鸟教程<h1>");

        matcher.find();
        System.out.println(matcher.group()); //<h1123>

        matcher.find();
        System.out.println(matcher.group()); //<h1>
    }

    public static void test3(){
        Pattern compile = Pattern.compile("<.*?>");
        Matcher matcher = compile.matcher("<h1123>RUNOOB-菜鸟教程<h1>");
        while (matcher.find()){
            System.out.println(matcher.group());
        }
//        <h1123>
//        <h1>
    }
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2022-05-17 09:06  响度均衡  阅读(33)  评论(0编辑  收藏  举报