正则表达式

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


}

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

相关文章推荐

QTP正则表达式

  • 2016-09-09 16:54
  • 77KB
  • 下载

Python正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化正则表达式,这些主题请查看其他教程...

正则表达式参考文档

  • 2016-08-15 17:43
  • 42KB
  • 下载

常用正则表达式

  • 2017-05-18 15:13
  • 28KB
  • 下载

【Python】Python学习笔记(二)——正则表达式

正则表达式的大致匹配过程1.依次拿出表达式和文本中的字符比较, 2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 3.如果表达式中有量词或边界,这个过程会稍微有一些不同。...

正则表达式

  • 2016-09-14 11:06
  • 52KB
  • 下载

shell脚本学习笔记之grep&正则表达式

grep命令是Linux中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本...

正则表达式验证

  • 2017-08-18 09:24
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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