java 正则举例
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
预定义字符类 | |
---|---|
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
字符 | |
---|---|
x | 字符 x |
\\ | 反斜线字符 |
\0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
\0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
\0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 带有十六进制值 0x 的字符 hh |
\uhhhh | 带有十六进制值 0x 的字符 hhhh |
\t | 制表符 ('\u0009') |
\n | 新行(换行)符 ('\u000A') |
\r | 回车符 ('\u000D') |
\f | 换页符 ('\u000C') |
\a | 报警 (bell) 符 ('\u0007') |
\e | 转义符 ('\u001B') |
\cx | 对应于 x 的控制符 |
忽略大小写:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
1.方法1:
public class Test {
public static void main(String[] args) throws Exception {
String str="forM";
String regEx="form"; //表示a或f
Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE); //表示整体都忽略大小写
Matcher m=p.matcher(str);
boolean rs=m.find();
System.out.println(rs);
}
}
//方法2:java正则表达式:
(?i)abc 表示abc都忽略大小写
a(?i)bc 表示bc忽略大小写
a((?i)b)c 表示只有b忽略大小写
import java.util.regex.*;
class Regex
{
public static void main(String[] args)
{
String str = "faaafbbdbddd";
String[] strArry = str.split("(.)\\1+");//以连续出现两次以上的字符为分界点,分割字符串
for(String s:strArry)
System.out.println(s);
System.out.println("-------------------------华丽分割线-----------------------------------");
System.out.println(str.replaceAll("(.)\\1+","$1"));//置换匹配的子字符串“$”可以用来取第一个参数中的组
System.out.println(str.matches(".*[d]{3}.*"));//判断整个字符串是否匹配
System.out.println("-------------------------华丽分割线-----------------------------------");
String str2 = "aaa,ff,ddd,sdss,dsa,dgdgdg,sss";
String reg = "\\b[a-z]{3}\\b";//取三个连续的,两边有边界分割
Pattern p = Pattern.compile(reg);//匹配规则封装
Matcher m = p.matcher(str2);//将匹配规则和要匹配的字符串组合生成匹配引擎
//System.out.println("m.matches():"+m.matches());这一句会使匹配的游标后移到第一个不匹配的位置:第一个f
while(m.find())//引擎可以方便的根据自己的字符串和匹配规则执行一些操作,比如find:找到下一个匹配的子字符串
/*获取、输出匹配的字段、起始位置、终了位置+1*/
System.out.println(m.group()+
"...m.start():"+m.start()+
"...m.end():"+m.end());
}
}
示例三:
1 public class RegTest { 2 public static void main(String[] args) throws Exception { 3 String str="formfirnformsajfowiehongform"; 4 5 String regEx="f.*?m"; // 6 7 Pattern p=Pattern.compile(regEx); //表示整体都忽略大小写 8 9 Matcher m=p.matcher(str); 10 11 int i = 0; 12 while(m.find()) { 13 System.out.println(m.group()+"------起始位置:"+m.start()+";结束位置"+m.end()+";长度:"+(m.end()-m.start())); 14 i++; 15 } 16 System.out.println("字符串form在str中出现的次数为:"+i); 17 18 System.out.println(str.substring(4, 12)); 19 } 20 }