前言:跟着偶操作,一篇文章带你练熟正则表达式。
原文出处:http://blog.csdn.net/u014158743/article/details/52939607
这里有一篇讲语法的,可以看看,更值得一提的是不得不说这个网站很清晰,很适合入门。
http://www.runoob.com/java/java-regular-expressions.html
###Demo1.java
public class Demo1 {
/**
* 正则表达式:专门针对字符串的
*/
public static void main(String[] args) {
String qq = "32398485794";
//boolean boo = checkQQ(qq);
//System.out.println(boo);
String regex = "[1-9]\\d{4,14}";//验证 qq号的正则表达式
boolean b = qq.matches(regex);
System.out.println(b);
}
//判断qq号是否正确,5--15,不能以0开头,必须全是数字
public static boolean checkQQ(String qq) {
int len = qq.length();
if(len>=5 && len<=15) {
if(!qq.startsWith("0")) {
try {
long num = Long.parseLong(qq);
return true;
}catch(NumberFormatException e) {
e.printStackTrace();
}
} else
System.out.println(qq+"号以0开头了");
} else
System.out.println(qq+"号的长度不合法");
return false;
}
}
###Demo2.java
public class Demo2 {
/**
* @param args
*/
public static void main(String[] args) {
String ss = "booooooook";
String regex = "bo+k";
boolean boo = ss.matches(regex);
System.out.println(boo);
}
}
###Demo3.java
public class Demo3 {
/**
* 正则表达式针对字符串的常用操作:
* 1:匹配: 实际用的是String类中的 boolean matches(String regex)方法
* 2:切割: 实际用的是 String类中的 Sring[] split(String regex)
* 3:替换: 实际使用的是 String replaceAll(String regex, String replacement)
* 4:获取:
* Pattern:把字符串形式的正则表达式编译成Pattern类型的对象
* Matcher:从指定的字符串中查找符合正则规则的内容
*/
public static void main(String[] args) {
// piPei();
// qieGe();
// tiHuan();
huoQu();
}
// 获取
public static void huoQu() {
String ss = "zhu yi la,ming tian fang jia.";
String regex = "[a-z]{4}";
// 把字符串形式的正则表达式编译成Pattern类型的对象
// Pattern类型的对象不具备从字符串中获取内容的功能
Pattern pattern = Pattern.compile(regex);
// Matcher具备从字符串中获取内容的功能
// 从字符串ss中或取符合pattern规则的内容
Matcher matcher = pattern.matcher(ss);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
// 替换
public static void tiHuan() {
// String ss = "lisi****zhangsan&&&&&wangwu##########liunengaa";
// String regex = "(.)\\1+";
// ss = ss.replaceAll(regex, "$1");
// String ss =
// "woieurowie2983748934789lskdjflsk039485094lksdjflk338949";
// String regex = "\\d{8,}";
// ss = ss.replaceAll(regex, "****");
String ss = "13545127892";
String regex = "(\\d{3})\\d{4}(\\d{4})";
ss = ss.replaceAll(regex, "$1****$2");
System.out.println(ss);
}
public static void qieGe() {
// String ss = "lisi.zhangsan.wangwu.liuneng";
// String regex = "\\.";
// String ss = "lisi zhangsan wangwu liuneng";
// String regex = " +";
String ss = "lisi****zhangsan&&&&&wangwu##########liunengaa";
String regex = "(.)\\1+";
String[] arr = ss.split(regex);
for (String str : arr) {
System.out.println(str);
}
}
// 匹配
public static void piPei() {
String tel = "18623568912";
String regex = "1[3578]\\d{9}";
boolean boo = tel.matches(regex);
System.out.println(boo);
}
}
###Demo4.java
public class Demo4 {
/**
*
* 练习1:我我..我我..我.我要...要要...要要...要学学....学学学...编编...编编..编程...程程...程程..程.程
* 要求,转成:我要学编程。
*/
public static void main(String[] args) {
String ss = "我我..我我..我.我要...要要...要要...要学学....学学学...编编...编编..编程...程程...程程..程.程";
ss = ss.replaceAll("\\.+", "");
System.out.println(ss);
ss = ss.replaceAll("(.)\\1+", "$1");
System.out.println(ss);
}
}
###Demo5.java
public class Demo5 {
/**
* 练习2:对ip地址按照数值顺序排序。
* 192.168.001.200 010.010.010.010 004.004.004.004 127.000.000.001
*/
public static void main(String[] args) {
String ss = "192.168.1.200 10.10.10.10 4.4.4.4 127.0.0.1";
//在每个地址前补两个0
ss = ss.replaceAll("(\\d{1,3})", "00$1");
System.out.println(ss);
//每个地址值只保留后三位
ss = ss.replaceAll("0*(\\d{3})", "$1");
System.out.println(ss);
String[] arr = ss.split(" +");
Arrays.sort(arr);
for(String str:arr) {
System.out.println(str.replaceAll("0*(\\d{1,3})", "$1"));
}
}
}
###Demo6.java
public class Demo6 {
/**
* 练习3:对邮件地址进行匹配。
*/
public static void main(String[] args) {
String email = "abc@sina.com.cn";
//String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,2}";
String regex = "\\w+@\\w+(\\.\\w+)+";
boolean boo = email.matches(regex);
System.out.println(boo);
}
}
###Demo7.java
public class Demo7 {
/**
* 练习4:实现网页爬虫
*/
public static void main(String[] args) throws IOException {
//getEmails();
getEmail();
}
//从网络上的html文件中获取邮箱
public static void getEmail() throws IOException {
String path = "http://localhost:8080/myweb/mail.html";
URL url = new URL(path);
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String regex = "\\w+@\\w+(\\.\\w+)+";
Pattern pattern = Pattern.compile(regex);
String line = null;
while((line = br.readLine())!=null) {
Matcher m = pattern.matcher(line);
while(m.find()) {
System.out.println(m.group());
}
}
}
//从本地文件中获取邮箱
public static void getEmails() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("fiile\\mail.html"));
String regex = "\\w+@\\w+(\\.\\w+)+";
Pattern pattern = Pattern.compile(regex);
String line = null;
while((line =br.readLine())!=null) {
Matcher m = pattern.matcher(line);
while(m.find()) {
System.out.println(m.group());
}
}
}
}