正则表达式

正则表达式:

用于操作字符串,通过一些特定的符号来体现。

数量词:

X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n
X{n,}? X,至少 n
X{n,m}? X,至少 n 次,但是不超过 m
字符类
[abc] abc(简单类)
[^abc] 任何字符,除了 abc(否定)
[a-zA-Z] azAZ,两头的字母包括在内(范围)
[a-d[m-p]] admp[a-dm-p](并集)
[a-z&&[def]] def(交集)
[a-z&&[^bc]] az,除了 bc[ad-z](减去)
[a-z&&[^m-p]] az,而非 mp[a-lq-z](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n
X{n,}+ X,至少 n
X{n,m}+ X,至少 n 次,但是不超过 m

public class RegexDemo {

public static void main(String[] args){
/*正则表达式
* 1 匹配。
*  String 类中的matches方法
* 2 切割
*  String 类中的split方法
* 3 替换
*   String类中的reolaceAll()方法
* 4 获取
* 将正则表达式进行对象的封装。
*  Pattern p = Pattern.compile("a*b");
*  通过正则对象的matcher方法与字符串相关联,获取要对字符串操作的匹配对象Matcher
  Matcher m = p.matcher("aaaaab");
  通过Mather匹配器对象的方法对字符串进行操作
  boolean b = m.matches();

* */
test_2();
}


public static void funtionDemo_4() {
String str = "da jia hao,ming tian bu fang jia";
String regex = "\\b[a-z]{3}\\b";
//1 将正则封装成对象
Pattern p = Pattern.compile(regex);
//2 通过正则对象获取匹配器对象
Matcher m =p.matcher(str);
//3 使用Matcher对象的方法对字符串进行操作。
//既然要获取三个字母组成的单词
//查找。find
while(m.find()){
System.out.println(m.group());//获取匹配的子序列
}

}


public static void funtionDemo_3() {
String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
str = str.replaceAll("(.)\\1+", "#");
str = str.replaceAll("(.)\\1+", "$1");
String tel = "15800001111";//158****1111
tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(tel);

}


public static void funtionDemo_2() {
String str = "zhangsan            xiaoqiang zhaoliu";
String str1 = "zhangsan.xiaoqiang.zhouliu";
String str2 = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
String[] names2 = str2.split("(.)\\1+)");
//组:((A)(B(c))) 看左括号此例一共四个组
String[] names = str.split(" +");
String[] names1 = str1.split("\\.");
for(String name:names){
System.out.println(name);
}

}


public static void funtionDemo_1() {
//匹配手机号是否正确
String tel = "158000011110";
String regex = "1[358][0-9]{9}";//或者"1[358]\\d{9}"
boolean b = tel.matches(regex);
System.out.println(b);

}
/*1 治疗口吃:我我...我我..我我我..我要要..要要要...要学学..学学..学 
*2 对ip地址排序
*3 对邮件地址效验
* */
public static void test_1(){
//1 将字符串中.去掉。用替换
String str = "我我...我我..我我我..我要要..要要要...要学学..学学..学";
str = str.replaceAll("\\.+", "");
System.out.println(str);
//2 替换叠词
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
}
public static void test_2(){
//192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55


String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";
//1 为了让ip可以按照字符串顺序比较,只要让ip的每一段的位数相同。
//所以,补零,按照每一位所需补充0.每一段都加两个零。
ip_str = ip_str.replaceAll("(\\d+)","00$1");
System.out.println(ip_str);
//然后每一段保留数字3位
ip_str = ip_str.replaceAll("0*(\\d{3})", "$1");
// 将ip地址切出
String[] ips = ip_str.split(" +");
TreeSet<String> ts = new TreeSet<String>();
for(String ip : ips){
ts.add(ip);
}
for(String ip : ts){
System.out.println(ip.replaceAll("0*(\\d+)", "$1"));
}
}
public static void test_3(){
String mail = "abc1@sina.com.cn";
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-z]{1,3})+";
boolean b = mail.matches(regex);
System.out.println(mail+":"+b);
}


/*网页爬虫:其实是一个程序用于在互联网中获取符合指定规则的数据
* 爬取邮箱地址。
* */
public static List<String> PaChong() throws IOException{
//1 读取源文件
BufferedReader bufr = new BufferedReader(new FileReader("c:\\mail.html"));
//2 对读取的数据进行规则的匹配。从中获取符合规则的数据
String regex = "\\w+@\\w+(\\.\\w+)+";
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
String line = null;
while((line = bufr.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
//3 将符合规则的数据存储到集合中
list.add(m.group());
} }

return list;
}


//爬取网页
public static List<String> PaChong_1() throws IOException{
//1 读取源文件
URL url = new URL("http://192.168.1.100:8080/myweb/mail.html");
BufferedReader bufIn = new BufferedReader(new InputStreamReader(url.openStream()));
//2 对读取的数据进行规则的匹配。从中获取符合规则的数据
String regex = "\\w+@\\w+(\\.\\w+)+";
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
String line = null;
while((line = bufIn.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
//3 将符合规则的数据存储到集合中
list.add(m.group());
}
}

return list;
}


}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34123420/article/details/51549870
个人分类: 正则表达式
上一篇反射
下一篇简单HTML的使用
想对作者说点什么? 我来说一句

正则表达式正则表达式

2011年01月10日 15KB 下载

正则表达式

2010年05月21日 97B 下载

正则表达式入门指导.ppt

2011年04月02日 694KB 下载

正则表达式总结文档集合

2009年03月19日 370KB 下载

xml需求文档及正则表达式介绍

2011年05月20日 12.68MB 下载

正则表达式简单课程学习

2011年07月10日 12KB 下载

RegexTester 正则表达式

2018年01月12日 69KB 下载

正则指引书籍

2018年04月23日 30.62MB 下载

没有更多推荐了,返回首页

关闭
关闭