精华内容
下载资源
问答
  • java正则提取需要用到Matcher类,下面给出案例示例供参考需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取612345678910111213importjava.util.regex.Matcher;importjava.util.regex.Pattern;...

    java正则提取需要用到Matcher类,下面给出案例示例供参考

    需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取61

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    public class Test {

    public static void main(String[] args) {

    String s = "A876X";

    // 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来

    // 在这里,我们要提取最后一个数字,正则规则就是“一个数字加上大于等于0个非数字再加上结束符”

    Pattern pattern = Pattern.compile("(\\d)[^\\d]*$");

    Matcher matcher = pattern.matcher(s);

    if(matcher.find())

    System.out.println(matcher.group(1));

    }

    }

    关于Matcher 中的几个方法说明:

    Mathcer.start()

    Matcher.end()

    Matcher.group()

    当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息. start()返回匹配到的子字符串在字符串中的索引位置. end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. group()返回匹配到的子字符串

    示例代码如下,具体功能请参考注释1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16Pattern p=Pattern.compile(“\d+”);

    Matcher m=p.matcher(“aaa2223bb”);

    m.find();//匹配2223

    m.start();//返回3

    m.end();//返回7,返回的是2223后的索引号

    m.group();//返回2223

    Mathcer m2=p.matcher(“2223bb”);

    m2.lookingAt(); //匹配2223

    m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0

    m2.end(); //返回4

    m2.group(); //返回2223

    Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出错,因为不匹配返回false

    m3.matches(); //匹配整个字符串

    m3.start(); //返回0

    m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串

    m3.group(); //返回2223

    另外,Mathcer类中start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.

    示例如下:1

    2

    3

    4

    5

    6

    7

    8

    9

    10Pattern p=Pattern.compile(“([a-z]+)(\d+)”);

    Matcher m=p.matcher(“aaa2223bb”);

    m.find(); //匹配aaa2223

    m.groupCount(); //返回2,因为有2组

    m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号

    m.start(2); //返回3

    m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.

    m.end(2); //返回7

    m.group(1); //返回aaa,返回第一组匹配到的子字符串

    m.group(2); //返回2223,返回第二组匹配到的子字符串

    注意: 只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用。

    展开全文
  • java 正则匹配空格字符串 正则表达式截取字符串需求:从一堆sql中取出某些特定字符串:比如配置的sql语句为:"company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 ...

    java 正则匹配空格字符串 正则表达式截取字符串

    需求:从一堆sql中取出某些特定字符串:

    比如配置的sql语句为:"company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";

    我要拿出所有的以@开头的作为变量,并且去重,则如下玩:

    ps:其中正则匹配空格是 “\s+”

    public classTest {public static voidmain(String[] args) {//String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";

    String input = "company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";

    String patternStr= "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";

    Pattern pattern=Pattern.compile(patternStr);

    String[] dataArr=pattern.split(input);

    Set set = new TreeSet();for(String str : dataArr) {

    System.out.println(str);if (str.startsWith("@")) {

    str= str.replaceAll("@", "");

    set.add(str);

    }

    }

    System.out.println(set);

    }

    [aa, bb, cc, cd, pid, ttt]输出如下:

    截图如下:

    后来又优化了一下,既然是找出以@开头的,那么再换一个正则:

    public classTst {public static voidmain(String[] args) {//String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";

    String input = "company_code = $csc223@cc and project_id = @pid ; update t set a = @aa,b=@cd,c=@cd,ttt=@ttt;update t2 set d=@bb";

    String regex= "@\\w+\\s?";//regex = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";

    Pattern pattern =Pattern.compile(regex);

    Matcher matcher=pattern.matcher(input);

    Set set = new TreeSet();while(matcher.find()){

    set.add(matcher.group());

    }

    System.out.println(set);

    }

    }

    2014年11月26日 16:50:31

    2015年 2月10日  23:43:45

    落雨

    394263788

    展开全文
  • “南风知我意,吹梦到西洲” 很多时候我们需要对文本进行替换,简单地使用replace方法就可以了。复杂的就需要使用正则java提供了正则相关的类Pattern 和... // 需要匹配字符串 String str = ""; // 预编译

    “南风知我意,吹梦到西洲”


    很多时候我们需要对文本进行替换,简单地使用replace方法就可以了。复杂的就需要使用正则;java提供了正则相关的类Pattern 和Matcher

    		// 正则表达式
    		String reg = "";
    		// 需要匹配的字符串
     		String str = "";
     		// 预编译
            Pattern patten = Pattern.compile(reg);
            // 进行匹配
            Matcher matcher = patten.matcher(str);
    		/**
    		* matcher.find()为true表示匹配到,如果匹配到多个下一次循环偏移到下一个匹配
    		* 每一次匹配可以理解为一组,从0开始
    		*/
            while (matcher.find()) { 
               // 疯狂操作
               // 利用start和end我们可以确定匹配到的字符串的位置
               // 当前匹配到的字符串的开始在原字符串的索引位置 
               matcher.start()
               // 当前匹配到的字符串的结尾在原字符串的索引位置
               matcher.end()
               // 当前匹配到的字符串
               matcher.group()
               // 替换第一次匹配的数据
               matcher.replaceFirst("");
               // 替换所有匹配的数据
               matcher.replaceAll("");
            }
    
    

    这里说几个需要注意的地方

    1. 正则需要进行预编译:
      阿里巴巴java开发手册中有提到:在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
      我们尽量不要再方法里面定义:Pattern pattern = Pattern.compile(“规则”);如果定义在方法体内每次调用都会进行编译影响方法效率。
    2. replaceFirst()和replaceAll()方法:
      这两个方法要么替换所有,要么只替换第一次限制太大了,只适用于某些特殊的场景,
    3. start(), end(),group():
      都可以传入一个int值取之前匹配的该方法内容,比如start(0)就表示第一次匹配到的字符串的开头在源字符串的位置
      group(0)比较特殊它代表整个表达式
    • 可以发现简单地替换不能满足我们的需求,正则还提供了两个替换的方法appendReplacement()和appendTail()
       String chapterContent = ""
       String line = "<br/>";
       String regx = num_zh_str;
       Pattern pattern = Pattern.compile(regx);
       Matcher matcher = pattern.matcher(chapterContent);
       StringBuffer chapterContentLine = new StringBuffer();
       while (matcher.find()){
           boolean equals = line.equals(chapterContent.indexOf(matcher.start() - line.length()));
           if (!equals){
               matcher.appendReplacement(chapterContentLine,line + matcher.group());
           }else{
               matcher.appendTail(chapterContentLine);
           }
       }
       matcher.appendTail(chapterContentLine);
       content.append(chapterName).append(chapterContentLine.toString());
    

    我的目的是在匹配的的字符串前面加一个换行符"<br/>",如果匹配字符前面已经有了换行符那就不要进行替换
    matcher.group()就是匹配到的字符串,通过appendReplacement()方法将匹配的的字符串替换后,将字符串添加到一个StringBuffer中,这里appendReplacement()方法只将匹配到的字符串添加到StringBuffer中,如果之前有匹配到的也会添加到StringBuffer中,但是没有匹配到的是不会添加到StringBuffer中的。所有我们需要在下面在调用matcher.appendTail(),以确保没有匹配到的也添加到StringBuffer中
    这样我们的目的就实现了,相比replaceXXX,appendXXX更灵活

    展开全文
  • java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update ...

     

    java 正则匹配空格字符串 正则表达式截取字符串

    需求:从一堆sql中取出某些特定字符串:

    比如配置的sql语句为:"company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";

    我要拿出所有的以@开头的作为变量,并且去重,则如下玩:

    ps:其中正则匹配空格是 “\s+”

     

    public class Test {
        public static void main(String[] args) {
            //String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
            String input = "company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
              
            String patternStr = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
            Pattern pattern = Pattern.compile(patternStr);
            String[] dataArr = pattern.split(input);
            Set<String> set = new TreeSet<String>();
            for (String str : dataArr) {
                System.out.println(str);
                if (str.startsWith("@")) {
                    str = str.replaceAll("@", "");
                    set.add(str);
                }
            }
            System.out.println(set);
        }

    [aa, bb, cc, cd, pid, ttt]输出如下:

    截图如下:

     

    后来又优化了一下,既然是找出以@开头的,那么再换一个正则:

    public class Tst {
         public static void main(String[] args) {
                //String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
                String input = "company_code = $csc223@cc and project_id = @pid ; update t set a = @aa,b=@cd,c=@cd,ttt=@ttt;update t2 set d=@bb";
                  
                String regex = "@\\w+\\s?";
                //regex = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
                Pattern pattern = Pattern.compile(regex); 
                Matcher matcher = pattern.matcher(input); 
                Set<String> set = new TreeSet<String>();
                 
                while(matcher.find()){ 
                    set.add(matcher.group());
                } 
                System.out.println(set);
            }
    }

    2014年11月26日 16:50:31

    2015年 2月10日  23:43:45

    落雨

    394263788

     

    转载于:https://www.cnblogs.com/ae6623/p/4416264.html

    展开全文
  • https://www.cnblogs.com/ggjucheng/p/3423731.html m.group(0)是m.group()一样是完整的匹配
  • 索引0是特殊的,表示“整个匹配项”。使用一对括号“ (...)”创建捕获组。括号内的所有内容均为捕获。通过打开括号(表示组可以重叠),从左到右(从1开始)对组编号。由于您的正则表达式中没有括号,因此不能存在第1组...
  • 如何利用正则表达式从一个文本文件中匹配出含有特殊字符串的一个衣服床,如一个邮箱地址。
  • 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但与”aa.a”和”ab*a”均不匹配。s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的...
  • package test; import java.util.regex.Matcher; import java.util.regex.Pattern;... * 方式一:基本正则表达式实现 * @param str * @param reg * @return */ public static boolean mat
  • 字符串正则匹配

    2013-07-03 11:12:16
    package liulixin;...import java.util.regex.Matcher; import java.util.regex.Pattern; public class PiPei { public static boolean matchDefaultPagePermalinkFormat(final String permalink) { final
  • 一位以前的同事在群里面突然发了个需求,要通过正则表达式来取值。给我发过来一张图, 从图中可以出,需求是,通过下面的正则表达式,取出红色框所标示的内容开始理解错误,我以为是要取出中间的那些内容,不包括"...
  • java正则表达式匹配字符串的方法:使用tostring,代码为【while(matcher.find()){tmp.add(matcher.group(1).toString());}】。java正则表达式匹配字符串的方法:使用tostringprivate static List getImage(String ...
  • 正则表达式匹配算法在leetcode玩耍遇到了这么一个题给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符。'*' 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s)...
  • Java字符串正则表达式匹配

    千次阅读 2021-03-25 15:06:44
    Java中经常会碰到一道题,就是字符串匹配。正常做的话是一道难度比较大的题目,且比较复杂。其实可以通过内置的Pattern类快速解决。 import java.util.regex.*; public boolean match (String str, String pattern...
  • 这篇文章主要介绍了Java中使用正则表达式实现字符串匹配字符串查找,匹配,替换,正则无不能做,特别是灵活的运用子串匹配,感兴趣的小伙伴们可以参考一下有一个String,如何查询其中是否有y和f字符?最黑暗的办法...
  • 近日做java项目时也有类似的字符串动态格式化的需求,因此,对照js方法的思路,实现一下java版的。主要是用String.java的replaceAll(String regex, String replacement)方法。 1.用途 当需要提前定义一个模版字符串...
  • Java字符串匹配正则表达式

    千次阅读 2018-06-05 09:46:07
    String sftimeString="^[0-9]*:[0-9]*:[0-9]*$";Pattern pattern=Pattern.compile(sftimeString);if(pattern.matcher(jtxx.getSc()).matches()){ //匹配后的逻辑}
  • Java中的正则匹配

    2020-07-24 14:58:55
    正则匹配即是在给定字符串中查找符合正则表达式的字符。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对...
  • 例: Java /** * 匹配IP地址格式 * @param ip * @return */ public static boolean matchIP(String ip){ Pattern p = Pattern.compile("((\\d?\\d?\\d)\\.){3}((\\d?\\d?\\d)\\.)");
  • 本文实例讲述了正则表达式实现字符的模糊匹配功能。分享给大家供大家参考,具体如下:package com.cn.util;import java.util.regex.Pattern;/*** 正则表达式 工具类** @author lifangyu*/public class RegexUtil {/*...
  • 随着使用,你会发现它和vim的一些理念是想通的,正则表达式的语法也基本上一样,并没有多少学习成本。从个人视野和工作效率上来看,sed命令都是程序员必须掌握的一个重要工具。那些说可以现场google...
  • 这篇文章主要介绍了正则表达式实现字符的模糊匹配功能,结合具体java实例形式分析了针对字符串的模糊匹配查询相关实现技巧,需要的朋友可以参考下本文实例讲述了正则表达式实现字符的模糊匹配功能。分享给大家供大家...
  • Java中使用正则表达式校验字符串正则表达式是某一位伟大的数学家发明的,现在已经形成了一个ISO标准,这个标准和编程语言没有关系。至于具体谁发明的,怎么发明的,我也忘记了:)。正则表达式简单理解就是用来匹配...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,622
精华内容 2,648
关键字:

java字符串正则匹配

java 订阅