当前位置: 代码迷 >> J2EE >> java 正则里分组的有关问题 Pattern p = Pattern.compile("f(.+?)k"); .+? 合起来是啥意思
  详细解决方案

java 正则里分组的有关问题 Pattern p = Pattern.compile("f(.+?)k"); .+? 合起来是啥意思

热度:829   发布时间:2016-04-17 23:42:13.0
java 正则里分组的问题 Pattern p = Pattern.compile("f(.+?)k"); .+? 合起来是啥意思啊
java 正则里分组的问题 Pattern p = Pattern.compile("f(.+?)k");    .+?   合起来是啥意思啊 
还有 正则表达式里的分组是啥意思啊  能举个例子讲讲吗
------解决思路----------------------
引用:
Quote: 引用:

分组有时候还是蛮好用的, 给你举个例子

String str = "RMB1212
------解决思路----------------------
456";

有些个财务报表多用字符串拼接, 上面表示了 货币类型 (RMB) 和两个数值 用 
------解决思路----------------------
 分开的。
这个可以用分组很方便的取出这3个属性。

Pattern pattern = Pattern.compile("(RMB
------解决思路----------------------
USD)(\\d+)(\\
------解决思路----------------------
)(\\d)");
        Matcher m = pattern.matcher(str);
        boolean matched = m.find();
        if (matched) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
            System.out.println(m.group(3));
            System.out.println(m.group(4));
        }

正则里面每个()为一个分组 可以通过group()传入下标获取不通分组的匹配结果
上面的打印为
RMB
1212

------解决思路----------------------

4
谢谢  很清晰啊  "(RMB
------解决思路----------------------
USD)(\\d+)(\\
------解决思路----------------------
)(\\d)"   为啥都用两个\        \\d+ 这个第一个\是转义 \d  因为\d是个整体    那\\
------解决思路----------------------
  这里为啥两个反斜杠 直接一个反斜杠转义
------解决思路----------------------
这样不行吗  能指点下嘛  

如果用\本身是java的转义符,如果只写\d 这样是把d转义的意思,  我需要先用java \ 将 \ 转义。 也就是得到\d 这样正则才是正确的
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

分组有时候还是蛮好用的, 给你举个例子

String str = "RMB1212
------解决思路----------------------
456";

有些个财务报表多用字符串拼接, 上面表示了 货币类型 (RMB) 和两个数值 用 
------解决思路----------------------
 分开的。
这个可以用分组很方便的取出这3个属性。

Pattern pattern = Pattern.compile("(RMB
------解决思路----------------------
USD)(\\d+)(\\
------解决思路----------------------
)(\\d)");
        Matcher m = pattern.matcher(str);
        boolean matched = m.find();
        if (matched) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
            System.out.println(m.group(3));
            System.out.println(m.group(4));
        }

正则里面每个()为一个分组 可以通过group()传入下标获取不通分组的匹配结果
上面的打印为
RMB
1212

------解决思路----------------------

4
谢谢  很清晰啊  "(RMB
------解决思路----------------------
USD)(\\d+)(\\
------解决思路----------------------
)(\\d)"   为啥都用两个\        \\d+ 这个第一个\是转义 \d  因为\d是个整体    那\\
------解决思路----------------------
  这里为啥两个反斜杠 直接一个反斜杠转义
------解决思路----------------------
这样不行吗  能指点下嘛  

如果用\本身是java的转义符,如果只写\d 这样是把d转义的意思,  我需要先用java \ 将 \ 转义。 也就是得到\d 这样正则才是正确的
哦 明白了 就是说JAVA里面要转义 一个特殊意义的字符 必须要两个反斜杠  是这个意思吧  比如
------解决思路----------------------
是特殊字符  所以用两个反斜杠转义它  \\
------解决思路----------------------
这样才是正确的转义  是这样理解的吧

  相关解决方案