首页 > 其他分享 >正则表达式语法

正则表达式语法

时间:2023-05-29 14:04:35浏览次数:40  
标签:匹配 String 正则表达式 matcher 语法 Pattern regStr 顺平

1. 正则表达式语法接上

2. 元字符-字符匹配符  883

正则表达式语法_java

正则表达式语法_字符串_02

2.1 应用案例  884-855

代码在com.stulzl.regexp03

RegExp03
package com.stulzl.regexp03;


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

//演示元字符-字符匹配符  884-885
public class RegExp03 {
    public static void main(String[] args) {
        String content = "a11c8abc _ABC y@";
        //String regStr = "[a-z]";//匹配a-z之间的任意一个字符
        //String regStr = "[A-Z]";//匹配A-Z之间的任意一个字符
        //String regStr = "abc";//匹配abc字符串(默认区分大小写)
        //说明(?i)是不区分大小写的意思,a(?i)bc代表bc不区分大小写,a((?i)b)c表示b不区分大小写
        //String regStr = "(?i)abc";//匹配abc字符串(不区分大小写)

        //String regStr = "[0-9]";//匹配0-9之间的任意一个字符

        //补充说明:如果后面带了{} 例如[^a-z]{2},就是匹配不在a-z之间的任意两个连续字符
        //String regStr = "[^a-z]";//匹配不在a-z之间的任意一个字符

        //补充说明:如果后面带了{} 例如[^0-9]{2},就是匹配不在0-9之间的任意两个连续字符
        //String regStr = "[^0-9]";//匹配不在0-9之间的任意一个字符

        //String regStr = "[abcd]";//匹配在abcd之间的任意一个字符

        //String regStr = "[^abcd]";//匹配不在abcd之间的任意一个字符

        //String regStr = "\\D";//匹配不在0-9之间的任意一个字符() 即非数字

        //String regStr = "\\w";//匹配 大小写英文字母, 数字,下划线

        //String regStr = "\\W";//匹配 等价于 [^a-zA-Z0-9_]

        //String regStr = "\\s";//  \\s 匹配任何空白字符(空格,制表符等)

        //String regStr = "\\S";//\\S 匹配任何非空白字符 ,和\\s 刚好相反

        String regStr = ".";// . 匹配出 \n 之外的所有字符,如果要匹配.本身则需要使用 \\.
        
        Pattern pattern = Pattern.compile(regStr);
        //解释当创建Pattern对象时,指定Pattern.CASE_INSENSITIVE,表示不区分字母大小写
        //Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);

        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

3. 元字符-选择匹配符  886

在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号 

正则表达式语法_bc_03

代码在com.stulzl.regexp04

Regexp04

package com.stulzl.regexp04;

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

//选择匹配符   886
public class Regexp04 {
    public static void main(String[] args) {
        //即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号 |
        String content = "hanshunping 韩 寒冷";
        String regStr = "han|韩|寒";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

4. 元字符-限定符   887

用于指定其前面的字符和组合项连续出现多少次

正则表达式语法_正则表达式_04

4.1 应用案例

代码在 com.stulzl.regexp05

Regexp05
package com.stulzl.regexp05;

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

//演示限定符的使用  887
public class Regexp05 {
    public static void main(String[] args) {
        String content = "a2111111aaaaaahello";
        //a{3},1{4},\\d{2}
        //String regStr = "a{3}";//表示匹配aaa
        //String regStr = "1{4}";//表示匹配1111
        //String regStr = "\\d{2}";//表示匹配两个的任意数字字符

        //a{3,4},1{4,5},\\d{2,5}
        //细节:java 匹配默认贪婪匹配,即尽可能匹配多的
        //String regStr = "a{3,4}"; //表示匹配 aaa 或者 aaaa
        //String regStr = "1{4,5}"; //表示匹配 1111 或者 11111
        //String regStr = "\\d{2,5}"; //匹配 2 位数或者 3,4,5位

        //1+  (解释+ 简单讲 1-多)
        //String regStr = "1+";//匹配一个 1 或者多个 1
        //String regStr = "\\d+"; //匹配一个数字或者多个数字

        //1*  (解释* 简单讲 0-多)
        //String regStr = "1*"; //匹配 0 个 1 或者多个 1

        //演示?的使用,遵守贪婪匹配  (解释? 简单讲 0或者1)
        String regStr = "a1?";//匹配 a 或者 a1


        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

5. 元字符-定位符  888

定位符, 规定要匹配的字符串出现的位置,比如在字符串的开始还是在结束的位置,这个也是相当有用的,必须掌握

正则表达式语法_bc_05

代码在com.stulzl.regexp06

Regexp06

package com.stulzl.regexp06;

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

//演示定位符的使用   888
public class Regexp06 {
    public static void main(String[] args) {
        //String content = "123-abc";
        String content = "hanshunping sphan nnhan";
        //以至少 1 个数字开头,后接任意个小写字母的字符串
        //String regStr = "^[0-9]+[a-z]*";
        //以至少 1 个数字开头, 必须以至少一个小写字母结束
        //String regStr = "^[0-9]+[a-z]+$";
        //以至少 1 个数字开头, 必须以至少一个小写字母结束,同时中间有一个 -
        //String regStr = "^[0-9]+\\-[a-z]+$";

        //表示匹配边界的han(这里的边界是指:被匹配的字符串最后,也可以是空格的子字符串的后面)
        //String regStr = "han\\b";
        String regStr = "han\\B";//与\\b相反

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

6. 分组  889

6.1 常用分组  889

正则表达式语法_正则表达式_06

代码在 com.stulzl.regexp07

Regexp07 
package com.stulzl.regexp07;

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

//分组  889
public class Regexp07 {
    public static void main(String[] args) {
        String content = "hanshunping s7789 nn1189han";
        //String regStr = "\\d\\d\\d\\d";//匹配四个数字的字符串

        //下面就是非命名分组
        //说明
        // 1. matcher.group(0) 得到匹配到的字符串
        // 2. matcher.group(1) 得到匹配到的字符串的第 1 个分组内容
        // 3. matcher.group(2) 得到匹配到的字符串的第 2 个分组内容
        //String regStr = "(\\d\\d)(\\d\\d)";

        //命名分组:即可以给分组取名
        String regStr = "(?\\d\\d)(?\\d\\d)";


        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
            System.out.println("第 1 个分组内容=" + matcher.group(1));
            System.out.println("第 1 个分组内容[通过组名]=" + matcher.group("g1"));
            System.out.println("第 2 个分组内容=" + matcher.group(2));
            System.out.println("第 2 个分组内容[通过组名]=" + matcher.group("g2"));
        }
    }
}

6.2 特别分组   890

正则表达式语法_正则表达式_07

代码在com.stulzl.regexp08

Regexp08
package com.stulzl.regexp08;

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

//演示非捕获分组  890
public class Regexp08 {
    public static void main(String[] args) {
        String content = "hello 韩顺平教育 jack 韩顺平老师 韩顺平同学 hello 韩顺平学生";
        // 找到 韩顺平教育 、韩顺平老师、韩顺平同学 子字符串
        //String regStr = "韩顺平教育|韩顺平老师|韩顺平同学";
        //上面的写法可以等价非捕获分组, 注意:不能 matcher.group(1)
        //String regStr = "韩顺平(?:教育|老师|同学)";

        //找到 韩顺平 这个关键字,但是要求只是查找韩顺平教育和 韩顺平老师 中包含有的韩顺平
        //下面也是非捕获分组,不能使用 matcher.group(1)
        //String regStr = "韩顺平(?=教育|老师)";

        //找到 韩顺平 这个关键字,但是要求只是查找 不是 (韩顺平教育 和 韩顺平老师) 中包含有的韩顺平
        //下面也是非捕获分组,不能使用 matcher.group(1)
        String regStr = "韩顺平(?!教育|老师)";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

7. 非贪婪匹配  891

在限定符后面加?

代码在com.stulzl.regexp09

Regexp09 

package com.stulzl.regexp09;

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

//演示非贪婪匹配  891
public class Regexp09 {
    public static void main(String[] args) {
        String content = "hello111111 ok";
        //String regStr = "\\d+";//默认贪婪匹配
        String regStr = "\\d+?";//非贪婪匹配

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()){
            System.out.println("找到:"+matcher.group(0));
        }
    }
}

标签:匹配,String,正则表达式,matcher,语法,Pattern,regStr,顺平
From: https://blog.51cto.com/u_15784725/6370419

相关文章

  • javascript常用正则表达式
    javascript身份证号验证正则1.//这个可以验证15位和18位的身份证,并且包含生日和校验位的验证。2.//如果有兴趣,还可以加上身份证所在地的验证,就是前6位有些数字合法有些数字不合法。3.4.function5.num=num.toUpperCase();6.//身份证号码为15位或者18......
  • 微信小程序 - WXML 模板语法
    【黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)】https://www.bilibili.com/video/BV1834y1676P/?p=19&share_source=copy_web&vd_source=03c1dc52eeb3747825ecad0412c18ab1真的讲的很细致WXML模板语法数据绑定1.......
  • Lua安装及基本语法
    lua的安装1安装luawgethttp://luajit.org/download/LuaJIT-2.0.5.tar.gztar-zxvfLuaJIT-2.0.5.tar.gzcdLuaJIT-2.0.5make&&makeinstallPREFIX=/usr/local/LuaJIT2配置环境变量vim/etc/profileexportLUAJIT_LIB=/usr/local/LuaJIT/......
  • webpack-loader-使用babel-loader转换处理高级的js语法
    webpack只能打包处理一部分高级的JavaScript语法。对于那些webpack无法处理的高级js语法,需要借助于babel-loader进行打包处理。例如webpack无法处理下面的JavaScript代码://定义装饰器函数functioninfo(target){target.info='Personinfo.'}//定义一个普通的类@info......
  • 正则表达式全部符号解释
    字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,'n'匹配字符"n"。'\n'匹配一个换行符。序列'\\'匹配"\"而"\("则匹配"("。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配'\n'或......
  • 程序员笔记1-学习markdown语法
    写在前面​ 作为一名程序员,发现要学习的东西实在是太多了,光靠自己的脑子记录实在太难,所以选择用markdown记录一下,先学习一下markdow的基本语法。以后还要学习latex这样的文本编辑器。markdown语法​ 下面开始正式记录markdown语法。1.标题2.无序列表强调用>无序列表......
  • 1 基础语法
    1、查看数据:1)View2)str3)class4)typeof5)mode6)glimpse7)summary2、R中数据结构 1)  *同质数据结构:向量、矩阵、多维数组*异质数据结构:列表、数据框 2)*原子向量,各个值是同类型的:logical、interger、double、character、c......
  • Freemarker模板语法大全
    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}${book.name?if_exists}//用于判断如果存在,就输出这个值${book.name?default(‘xxx’)}//默认值xxx${book.name!"xxx"}//默认值xxx${book.date?string('yyyy-MM-dd')}//......
  • pongo2 类似django 语法的golang 模版引擎
    pongo2类似django语法的golang模版引擎,当前兼容django1.7同时还包含了强大的三方生态支持(比如beego,gin,echo框架。。。)参考使用main.gopackagemain import("fmt""log" "github.com/flosch/pongo2/v6") funcmain(){tpl,e......
  • Java基本语法
    类与文件名在Java中,每个程序都是以类为基础进行编写的。一个简单的Java程序通常包含一个类,类名应该以大写字母开头。Java源代码文件的文件名必须与类名相同,并以.java作为文件扩展名。例如,下面是一个名为HelloWorld的简单Java程序:publicclassHelloWorld{publ......