正则表达式在学习字符串的过程中有很大的用处,这需要了解相关的字符知识,以及常用的
一,常用的正则表达式所支持的合法字符
字符 | 解释 |
---|---|
\t | 制表符 |
\n | 换行 |
\f | 换页符 |
\r | 回车符 |
\a | 报警符 |
\e | Escape符 |
\cx | x对应的控制符。例如\cM匹配Ctrl-M。x的值必须为A-Z或a-z之一 |
特殊字符
特殊字符 | 说明 |
---|---|
$ | 匹配一行的结尾,本身用\$ |
^ | 匹配一行的开头,本身用\^ |
( ) | 标记子表达式开始和结束的位置,本身要用\(和 \) |
[ ] | 标记中括号开始和结束的位置,本身要用\[和 \] |
{ } | 标记前面子表达式的频度,本身要用 \{ 和 \} |
* | 指定前面的子表达式可以出现零次或多次,本身要用 \* |
+ | 指定前面的子表达式可以出现零次或多次,本身要用 \* |
. | 匹配除换行符\n之外的任何单字符,本身用\. |
\ | 用于转义下一个字符,或指定八进制、十六进制字符,本身用\\ |
? | 指定前面子表达式可以出现零次或一次。本身用\? |
| | 指定两项之间任意选一项,本身用\| |
预定义字符
预定义字符 | 说明 |
---|---|
. | 可以匹配任何字符 |
\d | 匹配0~9的所有数字 |
\D | 匹配非数字 |
\s | 匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等 |
\S | 匹配所有的非空字符 |
\w | 匹配所有的单词字符,包括0~9所有数字、26个字母和下画线(_) |
\W | 匹配非单词字符 |
边界匹配符
边界匹配符 | 说明 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词的边界 |
\B | 非单词的边界 |
\A | 输入的开头 |
\G | 前一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符 |
\z | 输入的结尾 |
二、使用正则表达式
Java中可以运用Pattern和Matcher来使用正则表达式。而String类也可以实现Matcher的matchers()和lookingAt()同样效果的方法
import java.util.Arrays;
import java.util.regex.*;
public class JavaZhengZe {
//Matcher的find()和group()方法
//返回值114514 191981
public static void main(String[] args) {
String str = "hello114514"+"good191981"+"world0";
Matcher m =Pattern.compile("((11\\d)|(19\\d))\\d{3}").matcher(str);
while(m.find()){
System.out.println(m.group());
}
}
// String 中的正则用法
// public static void main1(String[] args) {
// //split、matches、replaceAll 3种用法
// //split分隔字符串
// String str="abc;123,456?999|haha";
// String[] strs=str.split(";|,");
// System.out.println(Arrays.toString(strs)+"\n");
//
// //matches 整个字符串是否匹配
// boolean isMatched = str.matches("(.*)123(.*)");//其中(.*)相当于省略号,可以很清楚的突出自己想要匹配的内容
// System.out.println(isMatched);
//
// //replaceAll 替换所需要的字符或字符串
// String replaceStr = "hello";
// String newStr = str.replaceAll("a",replaceStr);
// System.out.println(newStr);
// }
}