* a:字符
* x 字符 x , 举例:'a'表示字符a
* \\ 反斜线字符 , 在正则表达式中,只有两个\\才能表达一个\
* \n 新行(换行)符 ('\u000A')
* \r 回车符 ('\u000D')
* b:字符类
* [abc] a、b 或 c(简单类)
* [^abc] 任何字符,除了 a、b 或 c(否定)
* [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 表示所有的字母,不分大小写
* 同理,[0-9] 表示所有的数字
*
* c:预定义字符类
* . 任何字符(与行结束符可能匹配也可能不匹配) 假如要表示的就是.字符本身,用\.表示
* \d 数字:[0-9] 实际操作中,因为\\表示\,所以要写成\\d表示数字0~9
* \w 单词字符:[a-zA-Z_0-9]
* 注意,在正则表达式里组成单词的东西必须有 a-z,A-Z,0-9组成
*
* d:边界匹配器
* ^ 行的开头
* $ 行的结尾
* \b 单词边界 举例: hello world?123 字母'o'和'w'之间的空格、'?'是边界
* e:Greedy 数量词
* X? X,一次或一次也没有
* X* X,零次或多次
* X+ X,一次或多次
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超过 m 次
* 注意:如果在一个规则后面没有给定次数,那么默认是一次
*
* 正则表达式的应用:
* a:判断功能
* String的public boolean matches(String regex)
* b:分割功能
* String的public String[] split(String regex)
* 根据给定正则表达式的匹配拆分此字符串
* c:替换功能
* String的public String replaceAll(String regex, String replacement)
* 使用给定的replacement替换字符串中所有匹配给定的正则表达式的子字符串
* d:获取功能
* Pattern和Matcher类的使用
* 模式和匹配器的使用。
* a:判断功能举例:
* 需求:判断手机号码是否满足要求
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的手机号:");
String phoneNumber = sc.nextLine();
String regex = "1[3578]\\d{9}";
System.out.println("你的手机号:" + phoneNumber.matches(regex));
* b:分割功能举例:
* 需求: 有一个字符串"91 27 46 38 50",请写代码实现最终的输出结果
* "27 38 46 50 91"
String str = "91 27 46 38 50";
//对字符串进行分割,得到一个字符数组
String[] strArray = str.split(" ");
//把String[]转为int[]
int[] intArray = new int[strArray.length];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
//对int[]排序
Arrays.sort(intArray);
//将排序后的字符拼接成字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < intArray.length; i++) {
sb.append(intArray[i]).append(" ");
}
//转为字符串,去尾部空格
String result = sb.toString().trim();
* c:替换功能举例:
* 需求:有一个字符串"Hello1234566World6227002511086653java"把其中非字母用'*'代替
//定义一个字符串
String str = "Hello1234566World6227002511086653java";
//定义一个规则,把数字替换为*
String regex1 = "\\d+";
String regex2 = "\\d";
String replacement1 = "*";
String replacement2 = "";
String result1 = str.replaceAll(regex1, replacement1); //Hello*World*java
String result2 = str.replaceAll(regex2, replacement1); //Hello*******World****************java
String result3 = str.replaceAll(regex1, replacement2); //HelloWorldjava
* d:获取功能举例:
* 需求:将"da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?"中3个字母的子字符串输出
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
String regex = "\\b\\w{3}\\b"; // \\b是边界
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());
}
注意:调group()方法前必须先调用find()方法才能返回一个group.不然会报// IllegalStateException: No match found