我们先从案例开始:B:案例演示 需求:校验qq号码. 1:要求必须是5-15位数字 2:0不能开头
a:非正则表达式实现 用户输入为一个字符串,需要将每一个字符截取出来,然后遍历时进行判断每一个字符是否符合规则,过于繁琐 b:正则表达式实现 只需要写一个规则就可以了(` String strRgex="[1-9][0-9]{4,14}";`)正则表达式概念:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
常用的正则格式:
[abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 . 任何字符。我的就是.字符本身,怎么表示呢? \. \d 数字:[0-9] \w 单词字符:[a-zA-Z_0-9] X? X,一次或一次也没有 比如""空串 就是没有 X* X,零次或多次 大于等于1次 都算多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次案例:对邮箱账号进行判断
package org.westos.mydemo; import java.util.Scanner; public class Text2 { //1、请编写程序,校验键盘录入的电子邮箱是否合法,并测试 public static void main(String[] args) { System.out.println("请输入待测的邮箱"); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); // 邮箱的正则 6~18个字符,可使用字母、数字、下划线,需以字母开头 String emailRgex = "\\w{6,18}@[a-z1-9]{2,10}\\.(com|net|cn|org)"; boolean b = str.matches(emailRgex); System.out.println(b); if (b) { System.out.println("登陆成功"); }else{ System.out.println("登录失败"); } } }通过 replaceAll方法实现
public class Text1 { public static void main(String[] args) { String str = "as123dadsa123dsdasd123asdasd132131asd"; String s = str.replaceAll("[0-9]+", "*");//更具柜子找到之后替换成“*" System.out.println(s); } }Pattern和Matcher的结合使用
使用的是 find()方法 和 group()方法 注意一定要先使用find()方法先找到 才能用group()方法获取出来
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Text1 { public static void main(String[] args) { String str2="继续使用即代表您同意我们的<a href=\"https://accounts.firefox.com/legal/terms\">使用条款</a>和<a href=\"https://accounts.firefox.com/legal/privacy\">隐私政策</a>"; Pattern compile = Pattern.compile("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+"); Matcher matcher = compile.matcher(str2); if(matcher.find()){ System.out.println(matcher.group()); } } }