正则表达式定义了字符串的模式,本质是一种特殊的字符串对象。
正则表达式也可以用来搜索,编辑或处理文本。
String 支持正则表达式方法
.replaceAll()
.replaceFirst()
.split()
.matches()
字符 | 说明 | 实例 |
^ | 表达式开始 | |
$ | 表达式结尾 | |
[358a-z] | 一个符号,符号范围在3,5,8,a-z | |
\d === [0-9] | 代表一位数字 |
|
\d+ | 代表1个数字,或多个数字 | 相当[0-9]{1,} |
\d{3} | 代表3个数字 | 相当于[9-9]{3} |
[\u4e00-\u9fa5]{2,8} | 代表2到8个汉字字符 | |
* | 代表0个或多个前边的符号 {0,} | [a-z]* |
. | 代表1个任意的符号 | str.matches(“^.+$”) |
+ | 代表1个或多个前边的符号{1,} | \\d+ |
? | 代表0个或1个前边的符号 {0,1} | |
{n} | n个 | |
{n,} | n个或多个 | |
{m,n} | [a-zA-Z_0-9]{6,18} 和 \w{6,18} | |
\D | [^0-9] | |
\w | [a-zA-Z0-9_] | |
\W | [^a-zA-Z0-9_] | |
| | 匹配或正则表达式或,分组功能 | |
() | 分组 | |
\s | 代表空格 |
|
在java中会自动判断开始和结尾。
使用正则表达式,将字符串中的数字转换为空。
String str = "hello16java16mysql8html";
System.out.println(str);
//删除所有数字 \\d 代表数字 \\D 代表非数字(\\d取反)
String s1 = str.replaceAll("\\d", "");
System.out.println(s1);
运算结果如下
使用正则表达式,删除不是数字的内容。
String str = "hello16java16mysql8html";
System.out.println(str);
//删除不是数字的内容
String s1 = str.replaceAll("\\D", "");
System.out.println(s1);
运算结果如下
删除首次出现的字符串匹配删除,+表示{1,}首次出现数字,无论几个都可以删除。
String str = "hello16java16mysql8html";
System.out.println(str);
//删除首次出现的字符串匹配删除 \\d+
String s1 = str.replaceFirst("\\d+", "");
System.out.println(s1);
判断字符串有没有大写
String str = "hello16java16mysql8html";
String str1 = "helGlo16jaAva16mysql8html";
System.out.println(str);
if (str.matches("^.*[A-Z].*$")) {
System.out.println("有大写");
} else {
System.out.println("没大写");
}
System.out.println(str1);
if (str1.matches("^.*[A-Z].*$")) {
System.out.println("有大写");
} else {
System.out.println("没大写");
}
判断字符串有没有数字
String str = "hello16java16mysql8html";
System.out.println(str);
System.out.println(str.matches("^.*\\d.*$"));
判断字符串有没有大小写字母
String str = "hello16java16mysql8html";
System.out.println(str);
System.out.println(str.matches("^.*\\w.*$"));
判断字符串有没有中文
中文字符串的范围
String str = "hello16java16mysql8html";
System.out.println(str);
System.out.println(str.matches("^.*[\u4e00-\u9fa5].*$"));
判断电话号码
String phone = "13014577066";
String pattern = "^1[3,5,8]\\d{9}$";
if (phone.matches(pattern)) {
System.out.println("yes");
} else {
System.out.printf("手机号:%s不是合法的手机号。 \n", phone);
}
//是不是全英文
System.out.println("abc".matches("[a-zA-Z]+"));//true
System.out.println("ab c".matches("[a-zA-Z]+"));//false
System.out.println("ab123c".matches("[a-zA-Z]+"));//false
System.out.println("abDDDc".matches("[a-zA-Z]{1,}"));//true
贪婪模式
String h = "<div>hello-17</div><div>hello</div><span>java</span><div>java</div>";
System.out.println(h);
Pattern p = Pattern.compile("(<div>)(.*?hello.*?)(</div>)");
Matcher m = p.matcher(h);
while (m.find()) {
System.out.println(m.group(2));
}
加上?代表取消贪婪模式如不取消会以最大的长度进行计算。
String h = "<div>hello-17</div><div>hello</div><span>java</span><div>java</div>";
System.out.println(h);
Pattern p = Pattern.compile("(<div>)(.*hello.*)(</div>)");
Matcher m = p.matcher(h);
while (m.find()) {
System.out.println(m.group(2));
}
判断一个字符在字符串中出现的位置
String s = "java-ajavajavajavabc-mysqljavascript-aajava 16ajav";
String d = "java";
Pattern p = Pattern.compile("java");
Matcher m = p.matcher(s);
int nn = 0;
while (m.find()) {
++nn;
//System.out.printf("%s ", m.group());
}
System.out.printf("%s 在 %s 中出现了 %d 次。%n", d, s, nn);
int n = s.split("java").length > 0 ? s.split("java").length - 1 : 0;
if (s.endsWith("java")) {
n += 1;
}
System.out.println(n);