匹配汉字:
public class Demo{
public static void main(String args[]) throws Exception{
String str="中国人";
if(str.matches("[\\u3E00-\\u9FA5]{3}")){
System.out.println("符合");
}
else{
System.out.println("不符合");
}
}
}
正则表达式就是处理字符串的利器:
字符串匹配(字符匹配)
字符串查找
字符串替换
注意:\在正则表达式中很特别,所以又\出现的地方我们用\\表示;
pattern---被匹配的模式;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Demo{
public static void main(String args[]){
p("abc".matches("..."));
p("a9982a".replaceAll("\\d","-"));
Pattern p=Pattern.compile("[a-z]{3}");//创建匹配模板
Matcher m=p.matcher("fgh");//创建对应字符创的匹配器
//m.matches()进行匹配
p(m.matches());
}
public static void p(Object o){
System.out.println(o);
}
}
1、MetaCharacters:
初步认识认识一下:点(.)星(*)加(+)问号(?):
.:表示一个字符;
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]
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Demo{
public static void main(String args[]){
p("a".matches("."));//.表示一个字符
p("aa".matches("aa"));
p("aaaa".matches("a*"));//表示a出现零到多次
p("aaaa".matches("a+"));//表示a出现一到多次
p("".matches("a*"));
p("aaaa".matches("a?"));//表示a出现零到一次
p("".matches("a?"));
p("a".matches("a?"));
p("122334444555".matches("\\d{3,100}"));//表示数字3到100个
p("192.168.1.0".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
p("192".matches("[0-2][0-9][0-9]"));//表示每个数字的范围
}
public static void p(Object o){
System.out.println(o);
}
}
范围:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Demo{
public static void main(String args[]){
p("a".matches("[abc]"));//表示abc中的一个字符
p("a".matches("[^abc]"));//表示不是abc中的任意一个字符
p("A".matches("[a-zA-Z]"));//表示a到z或者A到Z之间的字符
p("A".matches("[a-z]|[A-Z]"));//表示a到z或者A到Z之间的字符
p("A".matches("[a-z[A-Z]]"));//表示a到z或者A到Z之间的字符
p("R".matches("[A-Z&&[RFG]]"));//表示A到Z之间并且是RFG中的一个字符
}
public static void p(Object o){
System.out.println(o);
}
}
认识 \s \w \d \:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Demo{
public static void main(String args[]){
p(" \n\r\t".matches("\\s{4}"));
p(" ".matches("\\s"));
p("a_8".matches("\\w{3}"));
p("abc444*&%".matches("[a-z]{1,3}\\d+[*&%$]+"));
//java中一个反斜杠表示转义字符,而在正则表达式中反斜杠有特殊意义,所以得用四个
p("\\".matches("\\\\"));
}
public static void p(Object o){
System.out.println(o);
}
}
边界:
^:在中括号里面表示取反,不在中括号里面表示行的开头;
$:表示行的结尾;
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Demo{
public static void main(String args[]){
p("hello sir".matches("^h.*"));//表示行已h开头后面是一个或多个字符
p("hello sir".matches(".*ir&"));//表示以ir结尾,前面有一个或多个字符
//表示已h开头后面跟一到三个a到z的字符,后面是o,在后面是单词边界,在后面是一到多个字符
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
}
public static void p(Object o){
System.out.println(o);
}
}
注意Matcher类中的reset()、find()、start()、end()方法;