正则表达式
一、正则表达式
1.字符合集:
a)[] [abc]:abc中的任意一个字符
b)^ [^abc]:除了abc中的任意字符(中文或者标点符号也行)
c)- [a-z]: 26个小写字母中的任意一个
d) [a-zA-Z09]:大小写字母0到9中的数字
e)& [a-z&[^bc]]:除了bc之外的任意一个小写字母
2.转义字符
a) .(点) 任意字符
b)\d 任意数字,相当于[0-9]
c)\w 任意单词字符,相当于[a-zA-Z0-9]
d)\s 任意空白字符
e)\D 非数字
f)\W 非单词字符
g)\S 非空白字符
3.数量词
a)x? 0~1个
b)x* 0~多个
c)x+ 1~多
d)x{n} n个 \w{5} 只能有5个
e)x{n,} n~多个 \w{5} 至少有5个
f)x{n,m} n~m个 \w{5,10} 5到10个
4.分组
1)() 可以把一系列正则表达式看做一组 (abc)
2) | 或 (abc)|(cba) 匹配abc或者cba
简单邮箱的正则表达式:
\w+@\w+[(\.com)|(\.cn)]+
String中正则表达式支持的三种方法:
1.字符串支持正则表达式的方式一:
* boolean flag= matches(String regex)
package day01; /** * 字符串支持正则表达式的方式一: * boolean flag= matches(String regx)
* 传入的参数为正则表达式 * - 根据给定的正则表达式验证当前字符串是否满足格式要求,满足返回true,否则返回false * @author ajia * */ public class RegularDemo { public static void main(String[] args) { /* * 邮箱正则在:[\w+@\w+(\.com)|(\.cn)]+ */ String regex="\\w+@\\w+[(\\.com)(\\.cn)]+"; //java中的\需转译 String mail="fangcf@tedu.cn"; boolean flag=mail.matches(regex); if(flag){ System.out.println("是邮箱"); }else{ System.out.println("不是邮箱"); } } }
2.字符串支持正则的方法二:
* String[] split (String regex)
* -将当前字符串按照正则进行拆分
*/
package d
字符串支持正则的方法二:
* String[] arr=字符串名.split (String regex)
* -将当前字符串按照正则进行拆分
-参数为正则表达式
*/
ay01; import java.util.Scanner; /** * 验证手机号码的正则表达式 * @author ajia * */ public class TestDemo { public static void main(String[] args) { /* * \d{11} */ System.out.println("请输入一个手机号:"); Scanner scan=new Scanner(System.in); String regex="[(\\+86)|(0086)]?\\s*[1]\\d{10}";//或者: [1]\\d{10} System.out.println(regex); String phoneNum=scan.nextLine(); boolean flag=phoneNum.matches(regex); if(flag){ System.out.println("是手机号"); }else{ System.out.println("不是手机号"); } } }
3.String replaceAll(String regex,String str)
package day01; /** * 字符串支持正则的方法三 *String replaceAll(String regex,String str) *第一个参数为正则表达式regex,第二个参数为替换的内容 * @author ajia * */ public class RegularDemo3 { public static void main(String[] args) { String str="abc123def456qhi789fdj"; /* * 将字符串中的数字替换为#Number * */ str=str.replaceAll("\\d+","#Number"); System.out.println(str); } }
习题:
1.和谐用语
* -假设用户输入一句话,屏蔽中间的脏话
* -比如:臭sb-》臭xxx
* -sb|cnm|tmd|tm|wqnmlgb|fuck
package day01; import java.util.Scanner; /** * 和谐用语 * -假设用户输入一句话,屏蔽中间的脏话 * -比如:臭sb-》臭xxx * -sb|cnm|tmd|tm|wqnmlgb|fuck * * @author ajia * */ public class Work { public static void main(String[] args) { System.out.println("请输入一句话"); Scanner scan=new Scanner(System.in); String input=scan.nextLine(); String regex="[(sb)|(cnm)|(tmd)|(wqnmlgb)|(fuck)]+";// 或者 (sb|cnm|tmd|tm|gb|fuck) String input1=input.replaceAll(regex,"***"); System.out.println(input1); scan.close(); } }
2.重命名图片,使用repaceAll重命名
package day01; import java.util.Scanner; import java.util.UUID; /** * 重命名图片 * -使用repaceAll重命名 * @author ajia * */ public class Work1 { public static void main(String[] args) { System.out.println("请输入一个图片名字格式为:xxxxxxx.jpg"); Scanner scan=new Scanner(System.in); String pothoName=scan.nextLine(); // String regex="\\."; // String []arr=pothoName.split(regex); // String newName=UUID.randomUUID()+"."+arr[1]; // System.out.println("新名字为:"+newName); // scan.close(); String regex="\\."; String[] arr=pothoName.split(regex); String regex1="\\w+[^jpg]"; // \\w+[^(jpg)]或者 .+\\. String newName=pothoName.replaceAll(regex1, System.currentTimeMillis()+"." ); System.out.println(newName); } }