1、 java正则表达式包-regex
package Day27;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
//通过"模型"对象进行正则表达式约束,"hello"为正则表达式
Pattern p=Pattern.compile("hello");
//我们通过这个"模型"制造出一个匹配器,让他去和字符串匹配,
//参数String就相当于被匹配的元素
Matcher m=p.matcher("hello");
//查看是否匹配成功,匹配成功返回true,否则返回false
System.out.println("m----"+m.matches());
//正则表达式是区分大小写的
Matcher m1=p.matcher("Hello");
System.out.println("m1----"+m1.matches());
}
}
package Day27;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test02 {
public static void main(String[] args) {
//通过"模型"对象进行正则表达式约束,"hello"为正则表达式
//.通用字符,可以匹配所有的字符除了\n \r
//*代表次数不限制,可以出现多次
Pattern p=Pattern.compile("h.*llo");
//我们通过这个"模型"制造出一个匹配器,让他去和字符串匹配,
//参数String就相当于被匹配的元素
Matcher m=p.matcher("hello");
//查看是否匹配成功,匹配成功返回true,否则返回false
System.out.println("m----"+m.matches());
//.*能否匹配上空
Matcher m1=p.matcher("hllo");
System.out.println("m1----"+m1.matches());
//.*能否匹配多次
Matcher m2=p.matcher("hasfgsdfgbsdfgbllo");
System.out.println("m2----"+m2.matches());
//.*能否匹配上特殊字符
Matcher m3=p.matcher("h@123\t2323llo");
System.out.println("m3----"+m3.matches());
//.*能否匹配上换行
Matcher m4=p.matcher("h\rllo");
System.out.println("m4----"+m4.matches());
//正则表达式是区分大小写的
Matcher m5=p.matcher("hAllo");
System.out.println("m5----"+m5.matches());
}
}
2、 正则表达式
2.1、 直接写需要匹配的内容
如果你想匹配出java内容
Pattern p=Pattern.compile("java");
//可以匹配上
Matcher m=p.matcher("java");
//我们只能匹配上java
System.out.println(m.matches());//ture
Matcher m1=p.matcher("c++");
System.out.println(m1.matches());//fales
Matcher m2=p.matcher("Java");//这里false的原因是正则表达式是区分大小写的
System.out.println(m2.matches());//false
//扩展内容:请不要将我们之前学习的String类方法弄混
String str="abcdejavafjhijavajkljavamjavan";
str=str.replace("java","@");
//此时str被替换,替换为
//abcde@fjhi@jkl@n@n
System.out.println(str);
2.2、 字符组
[ ]
允许匹配一组可能出现的字符
//只要是JAja([]中出现的字符)+ava的字符串都可以匹配上
Pattern p=Pattern.compile("[JAja]ava");
Matcher m1=p.matcher("java");
Matcher m2=p.matcher("Aava");
Matcher m3=p.matcher("aava");
Matcher m4=p.matcher("Java");
Matcher m5=p.matcher("Bava");
Matcher m6=p.matcher("[JAja]ava");
System.out.println(m1.matches());//ture
System.out.println(m2.matches());//ture
System.out.println(m3.matches());//ture
System.out.println(m4.matches());//ture
System.out.println(m5.matches());//false
System.out.println(m6.matches());//false
2.3、 区间
[a-z]代表小写字母
[A-Z]代表大写字母
[0-9]代表全部数字,等同于\d
{0,3}代表出现0~3次
{3}代表必须正好出现3次
{3,}代表至少出现3次
+等同于{1,},代表至少出现1次
*等同于{0,},代表出现0或任意次
?等同于{0,1},代表出现0或1次
Pattern p=Pattern.compile("[a-bA-Z0-9]ava");
//小写字母匹配规则为a-b,只能是ab两个,java的j不在区间内,所以无法去展示
Matcher m1=p.matcher("java");
Matcher m2=p.matcher("Aava");
Matcher m3=p.matcher("aava");
Matcher m4=p.matcher("Java");
Matcher m5=p.matcher("Bava");
Matcher m6=p.matcher("9ava");
Matcher m7=p.matcher("99ava");
System.out.println(m1.matches());//false
System.out.println(m2.matches());//ture
System.out.println(m3.matches());//ture
System.out.println(m4.matches());//ture
System.out.println(m5.matches());//ture
System.out.println(m6.matches());//ture
System.out.println(m7.matches());//false
{0,3}代表出现0~3次
{3}代表必须正好出现3次
{3,}代表至少出现3次
Pattern p=Pattern.compile("[a-bA-Z0-9]{0,3}");
Matcher m1=p.matcher("");//t
Matcher m2=p.matcher("abc");//t
Matcher m3=p.matcher("9827");//f
Matcher m4=p.matcher("Ab1");//t
Matcher m5=p.matcher("!!");//f
Matcher m6=p.matcher("你好");//f
Matcher m7=p.matcher("___");//f
System.out.println(m1.matches());//以下省略
2.4、 转义符
我们使用 \ 作为正则表达式的转义字符
由于java中 \ 本来就是转义字符的存在,所以要先将 \ 转义,才能正常转义
Pattern p=Pattern.compile("\\[JAja\\]ava");
Matcher m1=p.matcher("java");//f
Matcher m2=p.matcher("Aava");//f
Matcher m3=p.matcher("aava");//f
Matcher m4=p.matcher("Java");//f
Matcher m5=p.matcher("Bava");//f
Matcher m6=p.matcher("[JAja]ava");//t
System.out.println(m1.matches());//以下省略
2.5、 取反
//相当于将逻辑取反,但是我们依旧要注意我们的区间范围问题
Pattern p=Pattern.compile("[^a-bA-Z0-9]{0,3}");
Matcher m1=p.matcher("");//t
Matcher m2=p.matcher("abc");//f
Matcher m3=p.matcher("9827");//f
Matcher m4=p.matcher("Ab1");//f
Matcher m5=p.matcher("!!");//t
Matcher m6=p.matcher("你好");//t
Matcher m7=p.matcher("___");//t
System.out.println(m1.matches());//以下省略
2.6、 \w \d \s与\W \D \S
\w 匹配任意单字符,等同于[_A-Za-z0-9]
\d 匹配任意数字[0-9]
\s 匹配空白字符,等价于[\n\r\f\t\v],注意曲中包含空格
大写字母等同于取反
\W 等同于^\w
\D 等同于^\d [^0-9]
\S 等同于^\s
//\w代表了数组,大写字母,小写字母和下划线,\\d代表了数字
//所以如果你写的是[\\w\\d]和[\\w]是一个效果
Pattern p=Pattern.compile("[\\w]{0,3}");
Matcher m1=p.matcher("");//t
Matcher m2=p.matcher("abc");//t
Matcher m3=p.matcher("9827");//f
Matcher m4=p.matcher("Ab1");//t
Matcher m5=p.matcher("!!");//f
Matcher m6=p.matcher("你好");//f
Matcher m7=p.matcher("___");//t
System.out.println(m1.matches());//以下省略
2.7 \b表示字母的边界
什么是边界?\W就是边界[^a-zA-Z0-9]
.为全部匹配
*为可以出现很多或者不出现
?则可带可选字符,可以出现或不出现
如果一个单词前后出现了\b说明必须存在边界,否则无法匹配
Pattern p=Pattern.compile(".*(\\bjava\\b).*");
Matcher m1=p.matcher("");//f
Matcher m2=p.matcher("java");//t
Matcher m3=p.matcher("abjava");//f
Matcher m4=p.matcher("ab java c");//t
Matcher m5=p.matcher("ab+java+c");//f
Matcher m6=p.matcher("ab_java_c");//f
System.out.println(m1.matches());//以下省略
2.8 开始与结束
^表示开始,^ xxxx(不在[ ]内)表示以xxxx开头
$表示结束,yyyy$,表示以yyyy结尾
System.out.println("aabcd".replaceAll("aa","你好"));//你好bcd
System.out.println("aabcd".replaceAll("^aa","你好"));//你好bcd
System.out.println("aabcd".replaceAll("aa","你好"));//你好bcd
System.out.println("abacd".replaceAll("^aa","你好"));//abacd
System.out.println("baaaa".replaceAll("aa","你好"));//b你好你好
System.out.println("baaaa".replaceAll("aa$","你好"));//baa你好
System.out.println("baacd".replaceAll("cd","你好"));//baa你好
System.out.println("baacd".replaceAll("cd$","你好"));//baa你好
3、 分组
3.1、 使用()进行分组
//我们使用()进行分组,分组后
//group方法参数如果不传递,则会将匹配的字符串全部返回
//如果传递1会返回分组内容
Pattern p=Pattern.compile("h(\\d*).*llo");
System.out.println(p.pattern());//输出正则表达式字符串“h\w*llo”
Matcher matcher=p.matcher("h123456ello");
if(matcher.matches()){
System.out.println(matcher.group(1));//输出匹配结果
}
3.2、 命名分组
//我们使用名称进行分组
//使用?+<name>的方法进行分组
//group方法参数如果不传递,则会将匹配上的字符串全部返回
//如果传递对应名称会返回分组内容
Pattern p=Pattern.compile("h(?<test>\\d*)(?<test1>.*)llo");
System.out.println(p.pattern());
Matcher matcher=p.matcher("h123456e123wello");
if(matcher.matches()){
System.out.println(matcher.group("test"));//输出匹配结果_123456
System.out.println(matcher.group("test1"));//输出匹配结果_e13we
}