• JAVA 正则表达式


    正则表达式-菜鸟教程:

    https://www.runoob.com/regexp/regexp-syntax.html

    先看一个实例

    	String text = "#My# <name> is 'ZhangSan',18 <years> old this year.";	//文本
    	String regex = ".+";	//正则表达式,   ".+"意思是匹配所有的内容
    	@Test
    	public void regexTest() {
    		Pattern compile = Pattern.compile(regex);	//传入正则表达式,新建模板类(Pattern)的对象
    		Matcher m = compile.matcher(text);	//传入文本,用模板类的对象新建匹配类(Matcher)的对象
    		while(m.find()) {	//用匹配器(m)的find()方法查看是否能够匹配到内容,返回boolean
    			System.out.print(m.group() + "_");	//用匹配器的group()方法捕获匹配到的内容,并以String类型返回
    		}
    	}
    

    结果是

    只有一个下划线"_",可见整个句子都被一次匹配到了.

    从上边的例子可以看到,在JAVA中,使用正则表达式用到两个类,分别是

    PatternMatcher

    使用Pattern的静态方法compile()来获取一个Pattern对象,再用此对象的matcher()方法获取一个Matcher对象,最后使用while循环来遍历匹配的结果

    匹配符和限定符

    匹配符用于表达正则表达式的匹配内容.

    限定符用于控制正则表达式匹配的机制,写在匹配符后.

    匹配符:

    abc ==> 匹配字符串中的"abc"

    [abc] ==> 匹配字符串中"a"或"b"或"c"

    [a-zA-Z0-9] ==> 匹配字符串中的一个字母或数字

    [^0-9] ==> 匹配字符串中地一个数字以外的内容, 在中括号内,^表示'非'

    d ==> digital 匹配数字

    D ==> 匹配非数字内容

    w ==> 匹配字母数字下划线,等价于[A-Za-z0-9_]

    W ==> 匹配非字母数字下划线的内容

    s ==> 匹配空白字符(空格)

    S ==> 匹配空白符意外内容

    . ==> 匹配任意内容,除了 (回车符)和 (换行符)

    PS : 以上红色匹配符,都是一次只匹配一个字符(比如a,或8,等等),如果要一次匹配多个字符,需要添加限定符

    限定符:

    PS:限定符只作用于它前边的1个字符(或者一个小括号分组),比如ab+,这个+号只作用于b

      {n} ==> 出现n次

      {n,} ==> 出现至少n次

      {n,m} ==> 出现最少n次,最多m次

      + ==> 出现1-n次,等价于{1,}

      * ==> 出现0-n次,等价于{0,}

      ? ==> 出现0-1次,等价于{0,1},可以写在其他限定符后,表示懒惰匹配

    贪婪匹配和懒惰匹配

    贪婪匹配 : 除?以外的限定符,都是贪婪匹配

    懒惰匹配 : 在其他限定符后加上?,则是懒惰匹配.

    //一个用来匹配的字符串
    String sentence = "cb-ceb-ceeb-ceeeb-ceeeeb";
    
    //正则表达式
    String regex1 = "c.{2}b";
    //结果是"ceeb"
    
    String regex1 = "c.{2,}b";
    //结果是 "cb-ceb-ceeb-ceeeb-ceeeeb",可以看到,贪婪模式下整个字符串都被一次匹配
    
    String regex1 = "c.{2,}?b";   //懒惰模式,其中"."匹配2至多个,且尽可能少地匹配"."
    //结果是 "cb-ceb"  "ceeb"  "ceeeb"  "ceeeeb",贪婪模式下,只要满足条件就匹配.
    
    String regex1 = "c.{2,4}b";
    //结果是"cb-ceb"  "ceeb"  "ceeeb"  "ceeeeb"
    
    String regex1 = "c.+b";   //
    //结果是"cb-ceb-ceeb-ceeeb-ceeeeb", 整个字符串都被匹配下来
    
    String regex1 = "c.+?b";
    //结果是"cb-ceb"  "ceeb" "ceeeb"  "ceeeeb"  
    //没有"ceb"是因为先匹配到地"ce-ceb"包含了"ceb"
    
    String regex1 = "c.*b";   //以贪婪模式匹配以c和b为首尾,0至多个"."
    //结果是"cb-ceb-ceeb-ceeeb-ceeeeb",整个字符串被匹配
    
    String regex1 = "c.*?b";   //以懒惰模式,匹配c和b为首位,0至多个".",且匹配尽可能少的"."的个数
    //结果是 "cb"  "ceb"  "ceeb"  "ceeeb"  "ceeeeb"
    

      

    关于汉字匹配

    匹配汉字文字:

    [u4e00-u9fa5]

    匹配非汉字字符:

    [^u4e00-u9fa5]

    匹配双字节字符(汉字、中文标点符号等):

    [^x00-xff]

    示例

    //用来匹配的句子
    String sentence = "我的名字是barry,来自NewYork.";
    
    String regex = "[^\x00-\xff]+";
    //结果是 "我的名字是"  "来自"
    

      

    Pattern类

    f

    Matcher类

    f

    f

  • 相关阅读:
    python 网络爬虫框架scrapy使用说明
    计算机数据表示
    NoSQL 数据库应用
    什么是java序列化?什么情况下需要序列化?
    怎么实现动态代理?
    动态代理是什么?应用场景?
    什么是反射?有什么作用?
    nio中的Files类常用方法有哪些?
    什么是JAVA内部类?
    常见的异常类有哪些?
  • 原文地址:https://www.cnblogs.com/jinyu59/p/10778967.html
Copyright © 2020-2023  润新知