精华内容
下载资源
问答
  • java Matcher中的group

    千次阅读 2018-09-12 09:05:16
    java Matcher中的group 结论:group(0)得到的是匹配到的整个字符串,group(1)对应第一个括号的内容,group(2)对应第二个括号的内容,以此类推 @Test public void groupTest(){ String text = "abaaabccab1234...

    java Matcher中的group

    结论:group(0)得到的是匹配到的整个字符串,group(1)对应第一个括号的内容,group(2)对应第二个括号的内容,以此类推

    @Test
    public void groupTest(){
       String text = "abaaabccab1234ababcccab432dog";
       String regexp = "(a*b)([0-9]+)";
       Pattern pattern = Pattern.compile(regexp);
    
       Matcher matcher = pattern.matcher(text);
       while (matcher.find()){
           System.out.println("----------------");
           System.out.println(matcher.group());
           System.out.println(matcher.group(0)); //匹配到的整个字符串
           System.out.println(matcher.group(1)); //第一个括号
           System.out.println(matcher.group(2)); //第二个括号
       }
    }

    结果:

    ----------------
    ab1234
    ab1234
    ab         //第一个括号
    1234       //第二个括号
    ----------------
    ab432
    ab432
    ab        //第一个括号
    432       //第二个括号
    展开全文
  • java Matcher匹配头尾截取替换字符串

    千次阅读 2017-10-13 13:46:21
    java Matcher匹配头尾截取替换字符串,在java 编程中,我们常常有这样的需求:需要将一段字符串内的特定字符串,按照一定规则查找出来或替换,比如匹配文本开头规则和结束规则。

    在java 编程中,我们常常有这样的需求:需要将一段字符串内的特定字符串,按照一定规则查找出来或替换,比如匹配文本开头规则和结束规则。

    以下就是Matcher的使用:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * @Author changle
     * @Time 17/10/12.
     * @Desc 匹配头尾截取替换字符串
     * 待替换内容:
     * url: jdbc:mysql://${cot.identity.db.ip}:3306/${cot.identity.db.dbname}?useUnicode=true&characterEncoding=UTF8
     * 替换后:
     * url: jdbc:mysql://{{cot.identity.db.ip}}:3306/{{cot.identity.db.dbname}}?useUnicode=true&characterEncoding=UTF8
     */
    public class CommonTest {
        public static void main(String[] args) {
            String str = "url: jdbc:mysql://${cot.identity.db.ip}:3306/${cot.identity.db.dbname}?useUnicode=true&characterEncoding=UTF8";
            if (str.contains("${cot.")) {
                Pattern leftpattern = Pattern.compile("\\$\\{");
                Matcher leftmatcher = leftpattern.matcher(str);
                Pattern rightpattern = Pattern.compile("}");
                Matcher rightmatcher = rightpattern.matcher(str);
                int begin = 0;
                List<String> foundKeys = new ArrayList<>();
                while (leftmatcher.find(begin)) {
                    rightmatcher.find(leftmatcher.start());
                    String configKey = str.substring(leftmatcher.start(), rightmatcher.end());
                    System.out.println(configKey.replace("${", "{{"));
                    foundKeys.add(configKey);
                    begin = rightmatcher.end();
                }
                System.out.println("原内容:"+str);
                for (String foundkey : foundKeys){
                    str = str.replace(foundkey, foundkey.replace("${cot.","{{cot.").replace("}", "}}").replace("-","_"));
                }
                System.out.println("替换后:"+str);
            }
        }
    }
    


    展开全文
  • Java Matcher类 replaceAll 捕获组使用及使用符号$引用捕获组详解


    Java Matcher类 replaceAll 捕获组使用及使用符号$引用捕获组
    最近看了一段解析URL以判断支付方式是在线支付还是具体哪个网银或支付宝的代码。如下
    private String[] getAction(String url){
    String action = null;
    String pluginid = null;
    String pattern = "/(\\w+)_(\\w+)_(\\w+).html(.*)";
    Pattern p = Pattern.compile(pattern, 2 | Pattern.DOTALL);
    Matcher m = p.matcher(url);
    if (m.find()) {
    action = m.replaceAll("$2");
    pluginid =m.replaceAll("$3");
    return new String[]{action,pluginid};
    }else{
    return null;
    }
    }


    里面的m.replaceAll("$2")和m.replaceAll("$3")一直没看没明白什么意思,在网上搜也没有找到很具体的。结合网上一些博客和自己查看Matcher JDK源码的理解为大家分享一下。

    Java 正则表达式中的捕获组 Mathcer 类的捕获组相关方法

    先来看看Matcher 类的捕获组及相关方法

    如里要解析一个HTML标签<textare>里面的内容如:

    <textarea class="textarea" id="testid">经历了千千万万个轮回,我们相互寻觅似曾相识却又擦肩而过,不要怀疑今生一见就为什么对你如此痴迷。</textarea>

    中的“经历了千千万万个轮回,我们相互寻觅似曾相识却又擦肩而过,不要怀疑今生一见就为什么对你如此痴迷。

    private String  getTestarea(String text){
    Pattern p1=Pattern.compile("<textarea .*?>(.*?)</textarea>");
    Matcher m1=p1.matcher("<textarea class=\"textarea\" id=\"testid\">经历了千千万万个轮回,我们相互寻觅似曾相识却又擦肩而过,不要怀疑今生一见就为什么对你如此痴迷。</textarea>");
    String result=null;
    if(m1.find()){
    result=m1.group();
    System.out.println(result);
    result=m1.group(1);
    System.out.println(result);
    }
    }

    对应结果为:

    <textarea class="textarea" id="testid">经历了千千万万个轮回,我们相互寻觅似曾相识却又擦肩而过,不要怀疑今生一见就为什么对你如此痴迷。</textarea>

    经历了千千万万个轮回,我们相互寻觅似曾相识却又擦肩而过,不要怀疑今生一见就为什么对你如此痴迷。

    可以看到使用用java 正则表达式的捕获组很容易的就得到了标签<textarea>中的内容

    在模式串“<textarea .*?>(.*?)</textarea>”  中的(.*?)对应捕获组1,即m1.group(1),整一个匹配串对应捕获组0,即m1.group() 与m1.group(0)一至,如果有多少个模式串中有多少个()情况以上面的类似大家可能网上搜索一下。上面提到了Matcher类的方法这里顺便讲一下find和matchers方法的区别

    Matcher类 find 和matchers方法的区别 

    find方法是从要匹配的字符串的下标为0的位子一直找到结尾,如果整个要匹配的字符全和模式串对应,则find后对应Matcher对象的end方法返回值为要匹配的字符的长度。见下面代码
                Pattern p1=Pattern.compile("\\d+");
                Matcher m1=p1.matcher("123456");
       m1.find();
       System.out.println(m1.start());//0
        System.out.println(m1.end());//6
    如果不是整个要匹配的字符串和模式对应结果,如下
               Pattern p1=Pattern.compile("\\d+");
    Matcher m1=p1.matcher("qq123ww123ee123");
       m1.find();
       System.out.println(m1.start());//2
    System.out.println(m1.end());//5
    m1.find();
    System.out.println(m1.start());//7
    System.out.println(m1.end());//10
    matchers方法是对整个匹配串与模式串进行比较,符合结果为true否则为false。
     

    使用符号$对捕获组进行引用


    回到我们开始看的例子
    private String[] getAction(String url){
    String action = null;
    String pluginid = null;
    String pattern = "/(\\w+)_(\\w+)_(\\w+).html(.*)";
    Pattern p = Pattern.compile(pattern, 2 | Pattern.DOTALL);
    Matcher m = p.matcher(url);
    if (m.find()) {
    action = m.replaceAll("$2");
    pluginid =m.replaceAll("$3");
    return new String[]{action,pluginid};
    }else{
    return null;
    }
    }
    其实action = m.replaceAll("$2"),pluginid =m.replaceAll("$3")中的“$2”及“$3”是对捕获组的引用,假设现在getAction的实参为“/pay_to_deposit.html”。那么上面讲的捕获组group(2)等价于“to”,group(3)等价于"deposit"。实际上$3表示对捕获组group(3)的引用。下面大家可以结合JDK源码中Matcher类中 appendReplacement方法的说明的英文进行理解
    The replacement string may contain references to subsequences captured during the previous match: Each occurrence of $g will be replaced by the result of evaluating group(g). The first number after the $ is always treated as part of the group reference. Subsequent numbers are incorporated into g if they would form a legal group reference. Only the numerals '0' through '9' are considered as potential components of the group reference. If the second group matched the string "foo", for example, then passing the replacement string "$2bar" would cause "foobar" to be appended to the string buffer. A dollar sign ($) may be included as a literal in the replacement string by preceding it with a backslash (\$). 
    Matcher类中replaceAll方法调用了appendReplacement方法。从上面可以知道当我们在替换字符中本身有$符号时要做特殊的处理。顺便提醒一下在JAVA的String类的replaceAll方法中处理有$和\的字符串时也要提前处理即要转义。
    展开全文
  • Java matcher的使用

    2014-10-20 10:41:57
    今天在开发中使用Java 的正则匹配,发现使用matcher.find()方法返回true,但是matcher,groupCount()返回的确实0。 String s1 = "jqk"; Pattern p = Pattern.compile("q"); Matcher m = p.matcher(s1); ...

    今天在开发中使用Java 的正则匹配,发现使用matcher.find()方法返回true,但是matcher,groupCount()返回的确实0。

    String s1 = "jqk";

    Pattern p = Pattern.compile("q");

    Matcher m = p.matcher(s1);

    System.out.println(matcher.find());
    System.out.println(matcher.groupCount());

    返回:

    true

    0

     

    这是因为匹配的正则表达式没有加括号所导致的。

    String s1 = "jqk";

    Pattern p = Pattern.compile("(q)");

    Matcher m = p.matcher(s1);

    System.out.println(matcher.find());
    System.out.println(matcher.groupCount());

    返回:

    true

    1

    只需要将代码改成如红字形式即可解决这个问题。

    展开全文
  • Java Matcher类的方法

    2019-09-15 10:13:32
    Matcher类的方法 。。。 索引方法 索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配: 序号 方法 说明 1 public int start() ...
  • Matcher matcher=pattern.matcher(p.value); if(matcher.find()){ update(p); //会调用另一个线程 } else{ } } 只要把update(p) 放入if语句中,包括else,就会出错。 Caused by: java.util....
  • Matcher matcher = pattern.matcher(contentStr); StringBuffer sb = new StringBuffer(); try { while(matcher.find()) { String phoneStr = matcher.group(); phoneStr = phoneStr.substring(0, ...
  • 参考我的https://blog.csdn.net/qq_36951116/article/details/90549486
  • The Java Matcher class (java.util.regex.Matcher) is used to search through a text for multiple occurrences of a regular expression. You can also use a Matcher to search for the same regular expressi.....
  • java Pattern Matcher group

    千次阅读 2014-05-19 15:41:53
    结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用...java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅
  • matcher.java

    2020-06-23 11:34:25
    matcher.group() 是matcher中关键在正则表达式中 ()定义了一个组,group(0)就是指的整个串,group(1)指的是第一个括号里的东西,group(2)指的第二个括号里的东西。 需要细节的朋友,可下载Java文件
  • Java Regex - Matcher

    2016-08-22 14:32:15
    The Java Matcher class (java.util.regex.Matcher) is used to search through a text for multiple occurrences of a regular expression. You can also use a Matcher to search for the same regular ...
  • Java Pattern和Matcher用法

    2018-04-06 15:30:33
    Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现 package cs; import java.util.regex.Pattern; //Matcher import java.util.regex.Matcher; //Pattern和 public class Zuoye8 { public static ...
  • java Pattern和Matcher详解

    万次阅读 多人点赞 2013-10-08 19:47:09
    结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用...java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本
  • Pattern、Matcher正则表达java

    万次阅读 2020-09-11 14:27:51
    1.组(Group) 组是正则表达式的一个子集,每个组都有一个编号,通过从左到右计算左括号来进行编号。正则表达式“((A)(B©)) ”有4个组: ((A)(B©)) ...Matcher m1 = p.matcher("name jack, age 18
  • javaMatcher和pattern的使用

    千次阅读 2017-06-21 18:46:12
    这两个类位于java.util.regex包下,主要用于实现正则表达式Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式 两个静态方法创建:compile(String regex)和compile(String regex,int flags) 参数说明: ...
  • java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。
  • JAVA正则表达式Pattern和Matcher
  • Java使用Pattern和Matcher两个类来支持正则表达式功能,字符串提供的正则表达式功能实际也是调用这两个类来实现的。 本文将介绍Pattern和Matcher的使用方法。 Pattern Pattern用来表示一个...
  • java正则表达式Pattern,Matcher
  • 主要介绍了Java正则表达式Pattern和Matcher原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Java Pattern和Matcher字符匹配详解

    万次阅读 多人点赞 2017-09-02 21:40:33
    Pattern类定义  public final class Pattern extends Object implementsSerializable正则表达式的编译表示形式。...然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。
  • Java 字符串匹配器实现
  • Java Pattern和Matcher简介

    千次阅读 2009-12-07 14:09:00
    然后,可将得到的模式用于创建 Matcher 对象,依照Java正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。 因此,典型的调用顺序是: Pattern...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,575
精华内容 24,630
关键字:

javamatcher

java 订阅