目录
-
正则
正则表达式是用来描述具有一定特征的字符串的特殊字符串.A regex is a special string which is used to describe strings with certain characteristics。因此,正则表达式本身也是一个字符串,类似于“元数据”的概念,相当于查找结构信息。正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
-
工具regexbuddy
-
字符类
-
[]自定义,只匹配一个
^取反
- 区间
] 结束
\ 转义
-
默认字符集
\d 数字
\D 非数字
\w 字母加数字
\W [^\w]
\s 空格
\S非空格
-
量词
* 0个及以上
+ 1个及以上
? –>0 或 1个
{n}{n} n次 ,非负数
{n,}大于 等于 n次
{n,m} –>大于 等于 等n 小于 等于m次
-
贪婪模式
-
阻止贪婪模式方式
量词后面使用?
使用取反
-
边界
^开始
\b 单词边界
\B 非单词边界
$ 结束
-
选择符
| 优先级最低
-
分组
( )
(\组号) 反向引用
-
模式修改
i: 大小写不敏感
s: 单行模式
m: 多行模式
(?ism) 对右边起作用
(?-ism) 关闭模式
-
零宽断言
(?=exp) 先行断言,断言自身出现的位置后面能匹配exp
(?<=exp) 先行断言,断言自身出现的位置前面能匹配exp
(?!exp) 先行断言,断言自身出现的位置后面不能匹配exp
(?<!exp) 先行断言,断言自身出现的位置前面不能匹配exp
-
JAVA处理正则(重点)
在java处理正则表达式,使用Pattern和Matcher即可。
-
判断年龄是否符合
package day18.regEx;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo01RegTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄: ");
String num = sc.next();
// 正常的年龄 [0,150]
boolean res = isTrue("[0-9]|[1-9][0-9]|1[0-4][0-9]|150", num);
if (res) {
System.out.println("年龄合法");
} else {
System.out.println("年龄不合法");
}
}
/**
* 验证一个字符串是否满足正则要求(完全匹配)
* @param reg 规则
* @param input 数据
* @return
*/
public static boolean isTrue(String reg, String input) {
// 验证一个字符串是否是一个两位数 "00 ,01,10,20"
// 规则
Pattern p = Pattern.compile(reg);
// 验证的数据
// 规则和数据
Matcher m = p.matcher(input);
boolean flag = m.matches();
return flag;
}
}
-
判断字符串中是否包含子串
package day18.regEx;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo02RegTest {
public static void main(String[] args) {
// 判断字符中是否包含子串
// 子串 --- 规则
String reg = "sxt";
Pattern p = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
// 待验证字符串
String str = "sxt 哈哈哈 xixix";
// 查找是否满足
Matcher m = p.matcher(str);
boolean flag = m.find();
System.out.println(flag);
}
}
-
找出(获取)文本中所有的数字
package day18.regEx;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo03RegTest {
public static void main(String[] args) {
// 获取文本中所有的数字
// 规则,需要分组
String reg = "(\\d+)";
Pattern p = Pattern.compile(reg);
// 文本
String str = "sa5d46asd4af45555fs5684f6f5";
Matcher m = p.matcher(str);
// 判断是否含有子串
// 获取内容
// find()一步一步往后走
while (m.find()) {
System.out.println(m.group(0));
}
}
}