正则表达式:
package com.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test08 {
public static void main(String[] args) {
Pattern p = Pattern.compile("(?<=\\().*?(?=\\))");
String str1 = "(NORMAL)(BJ,NORMAL)(NORMAL,NORMAL)";
String str2 = "(12,23,35)(67)(90,12)";
Matcher m1 = p.matcher(str1);
while (m1.find()) {
System.out.println(m1.group());
}
System.out.println("----------------");
Matcher m2 = p.matcher(str2);
while (m2.find()) {
System.out.println(m2.group());
}
}
}
输出:
NORMAL
BJ,NORMAL
NORMAL,NORMAL
----------------
12,23,35
67
90,12
解释:(?<=\\() : 是以“(”开始
.*? 懒惰查找
(?=\\)) : 是以“)”结尾
问号? : 可以表示重复前面内容的0次或一次,也就要么不出现,要么出现一次。
.* : 点号.可以匹配任意字符,其中包括换行符,星号*则把它重复0次或更多次,问题就出现在.*上,因为星号是贪心的,所以你们要注意哦! 我们需要使用lazy 懒惰 可以在后面放一个?使其变为懒惰,例如:(*?),(+?),(??) ,{1,100}? 都可以将其变为懒惰
package com.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test08 {
public static void main(String[] args) {
Pattern p = Pattern.compile("(?<=\\().*?(?=\\))");
String str1 = "(NORMAL)(BJ,NORMAL)(NORMAL,NORMAL)";
String str2 = "(12,23,35)(67)(90,12)";
Matcher m1 = p.matcher(str1);
while (m1.find()) {
System.out.println(m1.group());
}
System.out.println("----------------");
Matcher m2 = p.matcher(str2);
while (m2.find()) {
System.out.println(m2.group());
}
}
}
输出:
NORMAL
BJ,NORMAL
NORMAL,NORMAL
----------------
12,23,35
67
90,12
解释:(?<=\\() : 是以“(”开始
.*? 懒惰查找
(?=\\)) : 是以“)”结尾
问号? : 可以表示重复前面内容的0次或一次,也就要么不出现,要么出现一次。
.* : 点号.可以匹配任意字符,其中包括换行符,星号*则把它重复0次或更多次,问题就出现在.*上,因为星号是贪心的,所以你们要注意哦! 我们需要使用lazy 懒惰 可以在后面放一个?使其变为懒惰,例如:(*?),(+?),(??) ,{1,100}? 都可以将其变为懒惰