❶ java 正则表达式组(Group)的使用
其实,你印出所有的group,就清楚如何写()了。
❷ java正则表达式分组
举例:正则 (http://)(.*)(\.com)$ 需要处理的 字符串 http:// www . kandianyingla .com
group 0 http :// www. kandianyingla .com
group 1 http://
group 2 www . kandianyingla
group 3 .com
了解?
❸ Java中 正则表达式中 组 是怎么用的我看了n遍,没看懂
组其实就是用来提取正则中匹配到的内容。
比如有正则表达式:abc(\d{2,5})efg,这个正则本身的意思很简单,就是字符串abc和efg之间有2到5个数字,所以字符串"abc12efg"、“abc34567efg”都能满足这个正则匹配。这个相信你能理解。
那么正则表达式模式中用小括号包起来的"\d{2,5}"这部分就叫“捕获组”,正则表达式引擎会将这部分匹配到的内容记下来,以便以后取用。java代码中,可以在调用Matcher对象的find方法得到true的返回值的时候(true说明正则表达式模式找到了符合匹配的内容),调用该Matcher对象的group(int groupNo)方法获得指定的组内容。还拿刚才那个例子来说,调用matcher.group(1)就会得到"12"、“34567”这样实际匹配的内容。这里要特别注意一下,组编号是从1开始计算的。0号组实际上就是整个正则表达式匹配到的内容。
再深入一点,上面讲到的所谓组是“捕获组”,正则引擎会记下来匹配内容,但是有时候我们不需要捕获,只是想要限制匹配,就会用到非捕获组。如果你真明白了捕获组,再看非捕获组以及前瞻后顾就明白了。
❹ java正则表达式关于分组的问题,我能理解group(0)是匹配的全组
(\\w+\\s?)+
你这个是贪婪匹配,
匹配到“Love ”的时候会尝试继续匹配,它发现“Live ”也能匹配成功,
会把组信息更新成最后匹配的。
还有m.groupCount() ,这个只是获取你的正则表达式的分组数,
跟你匹配不匹配没关系,你正则表达式一个括号,就返回1.
❺ Java常用的几个正则方法
JAVA中正则表达式处理字符串的四个常用方法:匹配、分割、替换、截取。其跟字符串的常用函数相似,但是使用正则表达式会更简单、更加简洁。下面是具体的例子:
1 public class TestRegex {
2
3 public static void main(String[] args) {
4 String str = "";
5 String regex = "";
6
7 // 匹配
8 regex = "[1-9][a-z]";
9 getMatches(str, regex);
10
11 // 分割
12 str = "1a:abc123:";
13 regex = ":";
14 getSpilt(str, regex);
15
16 // 替换
17 str = "1223334444aaabbc";
18 String oldChar = "(.)\1+";
19 regex = "$1";
20 getReplace(str, oldChar, regex);
21
22 // 截取
23 str = "urlabc123";
24 regex = "(.*)";
25 getSubstring(str, regex);
26
27 }
28
29 public static void getMatches(String str, String regex) {
30 System.out.println(str.matches(regex));
31 }
32
33 public static void getSpilt(String str, String regex) {
34 String[] array = str.split(regex);
35 for (String t : array) {
36 System.out.println(t);
37 }
38 }
39
40 public static void getReplace(String str, String oldChar, String regex)
{
41 System.out.println(str.replaceAll(oldChar, regex));
42 }
43
44 public static void getSubstring(String str, String regex) {
45 Pattern p = Pattern.compile(regex);
46 Matcher m = p.matcher(str);
47 if (m.find()) {
48 System.out.println(m.group(1));
49 }
50 }
51 }
❻ Java正则表达式问题
\\D是匹配一个非数字,\\D*是匹配0个或多个非数字,尽可能多,(\\D*)是将匹配到的所有非数字捕获到分组1以供需要时访问。
\\d是匹配一个数字,\\d+是匹配1个或多个数字,尽可能多,(\\d+)是将匹配到的所有数字捕获到分组2以供需要时访问。
.是匹配任意一个字符,.*是匹配0个或多个任意字符,尽可能多,(.*)是将匹配到的多个任意字符捕获到分组3以供需要时访问。
m.group(下标)是访问上面捕获到的分组,下标0对应整个捕获,下标1对应捕获到的分组1,下标2对应捕获到的分组2,以此类推。
所以,m.group(0)就是整个字符串,m.group(1)就是3000前面的所有字符,m.group(2)就是3000,m.group(3)就是3000后面的所有字符。
❼ java中正则表达式 分组
importjava.util.regex.*;
//表达式对象
Patternp=Pattern.compile("DR(\d{3})(New)R(\d)");
//创建Matcher对象
Matcherm=p.matcher("DR102NewR2");
//是否找到匹配
booleanfound=m.find();
if(found)
{
Stringgroup1=m.group(1);
Stringgroup2=m.group(2);
Stringgroup3=m.group(3);
}
应该是用group方法获取,以上代码没测试过,大概是这个意思
❽ JavaSE基础中正则表达式Matcher类的获取功能--group(),解惑必采纳,谢谢
在Java中,正则表达式是按照从左至右的顺序对字符串进行扫描匹配的,首先,find()和group()都是Matcher类的函数,而不是String类的函数,所以find()和group()是对字符串从左至右扫描的函数,而不是对同一字符串反复扫描的函数.
比如m.find()函数,如果找到匹配的子字符串,它返回true,没有找到匹配的子字符串,它返回false.当写到while条件中时,它表示持续在原字符串中从左至右扫描,当发现有匹配的子字符串时,由m.group()捕获并输出,如果扫描到原字符串尾也没有发现匹配的子字符串,则返回false,跳出循环.
以你的程序为例,m.find()函数会在原字符串中持续从左至右扫描三个字符的以空格为边界的单词,直到字符串尾,而不会反复从头开始扫描原字符串,除非你在while循环中使用while(m.find(0)),m.find(0)表示从原字符串的第一个字符开始扫描匹配的子字符串,这样程序会反复从原字符串的第一个字符开始扫描匹配的子字符串,会陷入无限循环.
也就是说,find()和group()函数,只会对原字符串从左至右扫描一遍,这样当第二次while循环时,不会是从原字符串头重新开始,而是从上一次匹配的位置后面开始第二次搜寻.
❾ java 正则表达式matcher.group()匹配多种结果的规则
这是由正则表达式的匹配策略所导致的,如果想要得到多个小的匹配结果你需要将正则表达式改为:
Stringreg="乘+(.*?)+车";
即可得到想要的结果:
具体原理你可以查看这个链接:http://blog.csdn.net/luoweifu/article/details/42759439 讲的很详细