正则表达式

原创 2016年05月31日 22:38:17

正则表达式:

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

数量词:

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;
}


}

版权声明:本文为博主原创文章,未经博主允许不得转载。

正则表达式个人学习总结

  • 2017年12月06日 10:50
  • 318KB
  • 下载

温故知新 javascript 正则表达式--(不错的正则的DEMO推荐要学习正则的同学看一下哦)

go :http://www.cnblogs.com/libinqq/archive/2008/07/31/1257699.html 很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学...

Java正则表达式使用demo

  • 2017年12月03日 23:07
  • 79KB
  • 下载

利用正则表达式搜索富文本框中的图片链接

项目中有一需求,删除一条资讯[新闻],要求删除资讯相关的标题图片和资讯内容中插入的图片。资讯内容采用富文本框实现。 界面如下: 代码如下: /// /// 删除资讯 ...

QTP高级5_QTP中使用正则表达式

  • 2017年12月12日 15:12
  • 16KB
  • 下载

正则表达式菜鸟教程4元字符

正则表达式 - 元字符 下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八...

python 正则表达式

  • 2017年11月28日 16:18
  • 228KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正则表达式
举报原因:
原因补充:

(最多只允许输入30个字)