Java:正则表达式的详解
class RegexDemo
{
public static void main(String[] args)
{
//CheckQQ_1();
//CheckQQ();
//demo();
//CheckTel();
//SplitDemo();
ReplaceDemo();
} //替换演示
public static void ReplaceDemo()
{
//String str = "123dffhe568kkkdsr7885445e";//要求:将字符串的数字替换成‘#’
//String regex = "\\d{5,}";//可以规定超过5个数字就将数字替换成‘#’
//String s = "#"; //String str = "zhakksxsqqwanwwwwu";//将叠词进行替换'&'
//String regex = "(.)\\1+";
//String s = "&"; String str = "zhakksxsqqwanwwwwu";//将叠词字符由多个变成一个
String regex = "(.)\\1+";
String s = "$1"; System.out.println(str.replaceAll(regex,s));
} //切割演示
public static void SplitDemo()
{
//String str = "zhangsan lisi wangwu";
//String regex = " +"; //一次或多次空格 //String str = "zhangsan.lisi.wangwu";
//String regex = "\\."; //特殊字符,对点和反斜杠进行转义 //String str = "zhangsan,lisi,wangwu";
//String regex = ","; //String str = "c:\\zhangsan\\lisi\\wangwu";
//String regex = "\\\\"; String str = "zhakksxsqqwanwwu";//按照叠词进行切割
String regex = "(.)\\1+";//第一次切割的结果为组被重用,接着进行后面一次或多次的切割(每一个组按照顺序有编号,反向引用第一组) String[] arr = str.split(regex); for(String s: arr)
{
System.out.println(s);
}
}
//匹配字符演示
public static void demo()
{
String str = "a";
String regex = "[bcd]";//给定要比较的字符串中内容必须只能是规则中的某一个字符。
boolean b = str.matches(regex);
System.out.println(b);//false
}
//匹配手机号 13xxx,15xxx,18xxx
public static void CheckTel()
{
String tel = "";
String regex = "[1][358]\\d{9}";//"[1][358]\\d{3,10}"
System.out.println(tel.matches(regex));
} //匹配QQ号
public static void CheckQQ()
{
String qq = "";
//String regex = "[1-9][0-9]{4,14}";
String regex = "[1-9]\\d{4,14}"; boolean flag = qq.matches(regex); if(flag)
System.out.println("qq:"+qq);
else
System.out.println("qq不符合要求!");
} /*
需求:对QQ号码进行校验
要求:5~15位,0不能开头,只能是数字
这种方式是使用String类中的方法,进行组合完成了需求,但是代码过于复杂。
*/
public static void CheckQQ_1()
{
String qq = "";
int len = qq.length();
if(len>= && len<=)
{
if(!qq.startsWith(""))//qq.chatAt(0)==0 //Integer.parseInt("12a") NumberFormatException
{
try
{
long l = Long.parseLong(qq);
System.out.println("qq:"+qq);
}
catch(NumberFormatException e)
{
System.out.println("qq出现非法字符......");
} /*
char[] arr = qq.toCharArray();
boolean flag = true;
for(int i=0;i<arr.length;i++)
{
if(!(arr[i]>='0' && arr[i]<='9'))
{
flag = false;
break;
}
}
if(flag)
{
System.out.println("qq:"+qq);
}
else
{
System.out.println("qq出现非法字符!");
}
*/
}
else
{
System.out.println("qq不能以0开头!");
}
}
else
{
System.out.println("qq号长度错误,请重新输入!");
}
}
}
import java.util.regex.*;
class RegexDemo2
{
public static void main(String[] args)
{
getDemo();
}
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le,du jia!";
System.out.println(str); String regex = "\\b[a-z]{4}\\b";//查找四个单词的子字符串 //str = "1237458";
//String regex = "[1-9]\\d{4,14}"; //将规则封装成对象。static Pattern compile(String regex)
Pattern p = Pattern.compile(regex); //让正则对象与要操作的字符串关联,返回一个匹配器。Matcher matcher(CharSequence input)。String实现了字符序列接口CharSequence
Matcher m = p.matcher(str); //通过引擎(匹配器)对负荷规则的字符串进行操作,例如引擎对象的方法 matches() //System.out.println(m.matches());//其实String类中的matcher方法。用的就是Pattern和Matcher对象来完成的。
//只不过被String的方法封装后,使用起来更为简单。但是功能却很单一。 while(m.find())//将规则作用到字符串上,并进行符合规则的子串查找。
{
System.out.println(m.group());//用于获取匹配后的结果
System.out.println(m.start()+"...."+m.end());
}
}
}
class RegexTest
{
public static void main(String[] args)
{
Test();
} public static void Test()
{
String str = "我我...我我...我要..要要...要要...学学学....学学...编编编...编编..程.程程...程...程";
StringBuilder sb = new StringBuilder(); //先切割(以出现一次或多次的点作为分隔符。特殊字符,对点和反斜杠进行转义)
String regex1 = "\\.+"; String[] arr = str.split(regex1); for(String s:arr)
{
sb.append(s);
} //再替换(将一个或多个叠词替换成一个字符)
String regex2 = "(.)\\1+";
String s1 = "$1";
System.out.println(sb.toString().replaceAll(regex2,s1));
}
}
public static void ipsort()
{
String ip = "192.68.1.54 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30"; ip = ip.replaceAll("(\\d+)","00$1");
System.out.println(ip); ip = ip.replaceAll("0*(\\d{3})","$1");
System.out.println(ip); String[] arr = ip.split(" ");
TreeSet<String> ts = new TreeSet<String>(); for(String s: arr)
{
ts.add(s);
} for(String s: ts)
{
System.out.println(s.replaceAll("0*(\\d+)","$1"));
}
} //对qq邮件地址进行校验
public static void checkMail()
{
String mail = "xiayuanquan@qq.com";
//mail = "1360074459@qq.com"; //String regex = "[a-zA-Z0-9_]+@(qq|QQ)(\\.[a-zA-Z]+)+";
String regex = "\\w+@\\w+(\\.\\w+)+"; if(mail.matches(regex))
System.out.println(mail);
else
System.out.println("mail is error!");
} }
import java.io.*;
import java.util.regex.*;
import java.net.*;
class RegexTest3
{
public static void main(String[] args)throws Exception
{
getMails();
getMails_1();
} //获取指定文档中的邮件地址,使用获取功能使用Pattern,Matcher
public static void getMails()throws Exception
{
BufferedReader bufr = new BufferedReader(new FileReader("mails.txt")); String line = null;
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
//String regex = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(regex); while((line=bufr.readLine())!=null)
{
Matcher m = p.matcher(line); while(m.find())
{
System.out.println(m.group());
}
}
} //从网络上获取邮件地址
public static void getMails_1()throws Exception
{
URL url = new URL("http://www.baidu.com:8080/mail.html"); URLConnection conn = url.openConnection(); BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null;
String regex = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(regex); while((line=bufIn.readLine())!=null)
{
Matcher m = p.matcher(line); while(m.find())
{
System.out.println(m.group());
}
}
}
}
Java:正则表达式的详解的更多相关文章
- java正则表达式语法详解及其使用代码实例
原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...
- Java正则表达式应用详解
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字 ...
- 黑马程序员 Java正则表达式,详解反斜线在Java中的作用
---------------------- ASP.Net+Android+IO开发S. .Net培训.期待与您交流! ---------------------- 在程序设计过程中,经常需要对获取 ...
- Java正则表达式API详解
1. Pattern类 public class PatternExample { /** * public static String quote(String s) * 返回指定字符串的字面值模式 ...
- Java正则表达式实例详解
创建正则表达式 你可以从比较简单的东西入手学习正则表达式.要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档. 字符 B 字符B \xh ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- Java 序列化Serializable详解
Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
- 最新java数组的详解
java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...
随机推荐
- STL之multiset
参见http://www.cplusplus.com/reference/set/multiset/ template < class T, ...
- “来用”alpha版使用说明书
1引言 1 .1编写目的 针对我们发布的alpha版本做出安装和使用说明,使参与内测的人员及用户了解软件的使用方法和相关内容. 1 .2参考资料 <c#程序设计基础>,赵敏主编,2011, ...
- iptables端口转发
iptables -t nat -A PREROUTING -d {外网ip}/32 -p tcp -m tcp --dport 4956 -j DNAT --to-destination 10.1. ...
- Ruby 多线程探索实践与归纳总结
Ruby 多线程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程. Ruby 中我们可以通 ...
- Linux网络编程实例解析
**************************************************************************************************** ...
- hdu 3549 Flow Problem 网络流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Network flow is a well-known difficult problem f ...
- JS模板引擎 :ArtTemplate (1)
1.为什么需要用到模板引擎 我们在做前端开发的时候,有时候经常需要根据后端返回的json数据,然后来生成html,再显示到页面中去. 例如这样子: var data = [ {text: " ...
- SQLite中的PRAGMA语句攻略
原文地址:http://iihero.iteye.com/blog/1189633 PRAGMA语句是SQLITE数据的SQL扩展,是它独有的特性,主要用于修改SQLITE库或者内数据查询的操作.它采 ...
- asp.net的sessionState节点详解
web.config关于sessionState节点的配置方案,sessionState有四种模式:off,inProc,StateServer,SqlServer. 1.off模式 从字面上就可以看 ...
- Ckeditor 中一些核心的对象的作用
1.CKEditor CKEditor对象用于掌管全局,他是一个单例对象,管理着所有实例化了的编辑框. 通过replace方法创建编辑框实例. 2.CKEditor.editor 表示一个编辑框实例, ...