正则表达式
概念:正确规则的表达式 规则java给我们定的 是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
规则字符在java.util.regex Pattern类中。
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] 0到9的字符都包括
C:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi中空格,?,;会被匹配到
E:Greedy 数量词
X? X,一次或一次也没有 比如""空串 就是没有
X* X,零次或多次 大于等于1次 都算多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
例:
String regx="[abc]";//允许出现a,b,c中的任意一个
regx="[123ABCabc]";//允许出现1,2,3,A,B,C,a,b,c中任意一个
regx="[^123]";//除了123其他都可以
regx="[0-9]";//0-9中任意一个
regx="[a-z]";//a-z中任意一个
regx="[A-Z]";//A-Z中任意一个
regx="[0-9a-zA-Z]";//0-9,a-z,A-Z中任意一个
regx=".";//匹配任意单个字符
regx="\\.";//我想让.代表这个.本身 需要对点进行转意
regx="\\d";//表示[0-9]
regx="\\w";//表示 [a-z_A-Z]即a-z,A-Z和下划线
regx="a?b?";//一次或一次也没有 ""空串就代表0次
regx="a*";//零次或多次 大于等于1次 都算多次
regx="a+";//至少一次,或多次
regx="\\w+";
regx="[0-9]{5}";//正好出现几次
regx="[a-z]{5,}";//至少5次
regx="[a-zA-Z0-9]{6,18}";//表示6到18位
运用演示:
//A:案例演示: 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27
38 46 50 91”
String string="91 27 46 38 50"; //转成此结果 "27 38 46 50 91"
//思路:1.截取空格 返回一个字符串数组
//2.将一个字符串数组,转成一个int类型的数组
//3.排序
//5.遍历数组,拼串
String[] strs = string.split(" ");
int[] arr=new int[strs.length];
//遍历字符串数组的元素,装到int数组里面去
for(int i=0;i<strs.length;i++) {
arr[i]=Integer.parseInt(strs[i]);
}
//排序
Arrays.sort(arr);
//System.out.println(Arrays.toString(arr));
//遍历int数组 拼串
//String string2="";
StringBuffer sb = new StringBuffer();
for(int i=0;i<arr.length;i++) {
sb.append(arr[i]).append(" ");
}
String string2 = sb.toString().trim();
System.out.println(string2);
Pattern和Matcher的概述
Pattern: 模式器 用来封装正则表达式
Matcher: 匹配器 用来匹配正则表达式
把一个正则表达式封装进模式器里面
Pattern p = Pattern.compile("a*b");
通过模式器,获取匹配器,并传入需要匹配的字符串
Matcher m = p.matcher("aaaaab");
调用匹配器中的方法,进行匹配
boolean b = m.matches();
Matcher 匹配器中的两个方法
boolean find() 查找是否有符合正则的字符串
String group() 获取到符合正则的字符串
例:
//需求:是获取到 三个字母组成的单词
String string="da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
//定义正则
String regx="\\b[a-z]{3}\\b";//需要定义单词边界
//获取模式器
Pattern p = Pattern.compile(regx);
Matcher matcher = p.matcher(string);
//我想要获取到符合正则的字符串,那前提是你要先找有没有符合正则
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String group = matcher.group();
sb.append(group).append(" ");
}
System.out.println(sb.toString().trim());