正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
Java 正则表达式和 Perl 的是最为相似的。
java.util.regex 包主要包括以下三个类:
Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
1.正则表达式获取字符串中数字字符串和字母字符串的个数,以及统计字符个数:
package com.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式获取字符串中数字字符串和字母字符串的个数,以及统计字符个数
* @author dell
*正则表达式的原理:通配符匹配技术
* \d 表示匹配任何数字
* \D 表示匹配任何数字之外的字符
* \w 表示匹配任何ASCII单字符
* {n,m} 表示
*/
public class NumberStringTest {
public static void main(String[] args) {
String u="wedbnwy32iy232344236tegvewjhn23843872738349348wngeijhwj84378438974324g2nf642";
//正则表达式
Pattern p = Pattern.compile("\\d{2,}");
Matcher m = p.matcher(u);
int i=0;
while(m.find()){
System.out.println(m.group());
i++;
}
System.out.println("共有"+i+"个数字字符串");
Pattern p1 = Pattern.compile("\\D{2,}");
Matcher m1 = p1.matcher(u);
int j=0;
while(m1.find()){
System.out.println(m1.group());
j++;
}
System.out.println("共有"+j+"个字母字符串");
Pattern p2 = Pattern.compile("\\w");
Matcher m2 = p2.matcher(u);
int k=0;
while(m2.find()){
System.out.print(m2.group());
k++;
}
System.out.println("\n共有"+k+"个字符");
}
}
2.正则表达式判断是否是ip地址
package com.regex;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式判断是否是IP地址 IP可能的范围是0-255.0-255.0-255.0-255
*
* @author dell
*
*/
public class RegexIPAddress {
public static class IPAdd {
public boolean isIP(String addr) {
//判断IP地址的长度 1.1.1.1------255.255.255.255
if (addr.length() < 7 || addr.length() > 15 || "".equals(addr)) {
return false;
}
// 判断IP格式和范围
String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
Pattern pat = Pattern.compile(rexp);
Matcher mat = pat.matcher(addr);
boolean ipAddress = mat.find();
return ipAddress;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个IP地址:");
String ip = scanner.nextLine();
IPAdd ipAdd = new IPAdd();
//判断是否是IP地址
System.out.println(ipAdd.isIP(ip));
}
}
3.使用正则表达式从一个给定的字符串中找到数字串:
package com.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 使用正则表达式从一个给定的字符串中找到数字串
* @author dell
*
*/
public class RegexMatches {
public static void main(String[] args) {
//按制定模式在字符串查找
String line = "我从山里千里迢迢来,翻山越岭,如今掐指一算行走了3578766米,完成了一次有趣的徒步旅行!";
String pattern = "(\\D*)(\\d+)(.*)";
//创建Pattern对象
Pattern r = Pattern.compile(pattern);
//创建Matcher对象
Matcher m =r.matcher(line);
if(m.find()){
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
System.out.println("字符串个数:"+m.groupCount());
}else{
System.out.println("NO MATCH");
}
}
}
4.使用正则表达式对单词“imooc”出现在输入字符串中出现次数进行计数:
package com.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 使用正则表达式对单词“imooc”出现在输入字符串中出现次数进行计数
* @author dell
* \b 匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",
* 但不匹配"verb"中的"er"。
* public int start() 返回以前匹配的初始索引
* public int end() 返回最后匹配字符之后的偏移量。
*/
public class RegexMatches1 {
private static final String REGEX = "\\bimooc\\b";
private static final String input = "imooc,imooc是慕课网的域名,网址是:www.imooc.com";
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
//获取matcher对象
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count++;
System.out.println("Match number:"+count);
System.out.println("start():"+m.start());
System.out.println("end():"+m.end());
}
}
}
如果你喜欢的话,记得点赞,请支持我!更多精彩,下回分解。
热门评论
第二个查ip的应该把find改成matches吧
干得漂亮,就是正则表达式字符表以及字符串正则校验放到最前面阅读起来会更好。