java-正则表达式
来源:互联网 发布:javaweb程序员简历 编辑:程序博客网 时间:2024/06/11 10:08
* 正则表达式:符合一定规则的表达式
* 作用:用于专门操作字符串
* 特点:用于一些特定的符号来表示一些代码操作,这样就能简化书写;
* 好处:可以简化对字符串的复杂操作。
*
*注意:
* 在正则表达式中 反斜杠是一对一对的出现
*
*
*
* 具体操作功能:
* 1,匹配:String matches方法
* boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
3,替换:String replaceAll();
4,获取 :使用Pettern 对象 Matcher对象
密码 包含数字 英文 特殊字符 6到16位
String ss = "^[a-zA-Z0-9`~!@#$%^&*()+=|{}':;',//[//].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]{6,16}$"
第一个例子:匹配功能的演示
第一个例子:匹配功能的演示 * 需求1: * 对QQ号码进行校验 * 要求;5-15位,0不能开头,只能是数字 * 如果用普通的String方法来进行校验很复杂 * 但是用正则表达式会很简单 需求2: 对手机号码进行校验 * 判断手机号码 手机号段只有 13xxxxx,15xxxxx,18xxxxx 共11位 * import java.lang.*;public class RegexDemo{ public static void main(String[] args) {chackQQ();chackTel(); } public static void chackQQ() {String qq = "123456789";// 这个意思是:第一位只能是1到9的数字,从第二位开始到// 结束出现4到14次String regx = "[1-9][0-9]{4,14}";// 创建规则//也可以改成这样//String regx = "[1-9]//d{4,14};// 调用规则boolean flag = qq.matches(regx);if (flag){ System.out.println(qq + "....is ok");} else{ System.out.println(qq + ".....格式错误");} } public static void chackTel() {String tel = "13500000111";//创建规则 第1个号码是1 第2个号码是358其中一个//第3个号码到第11个号码是数字 剩下的还有9个数String telReg = "1[358]\\d{9}";boolean flag = tel.matches(telReg);if(flag){ System.out.println(flag + "...是手机号码");}else{ System.out.println(flag + "不是手机号码");} }}
***************************************************邪恶的分割线**********************************************************************************************************************
第二个例子:切割功能的演示
/** * 字符串切割,用正则表达式 */import java.lang.*;public class RegexDemo2{ public static void main(String[] args) {// 需求一// 按照空格进行切割(可能出现多个空格)// splitDemo("zhangsan lisi wangwu"," +");// 需求二// 按照反斜杠斜杠进行分割(在正则表达式中反斜杠一般成对出现)进行转义// splitDemo("c:\\java\\a.txt","\\\\");/** * 需求三: 按照叠词进行切割(第一种只有两个叠词,第二种有两个或者两个以上叠词) * 在这里使用了组的概念:可以将规则封装成一个组,用()完成,组的出现都有编号 * 从1开始,想要使用已有的组可以通过\n(n是组的编号)的形式来获取 */// splitDemo("aqbbcdde","(.)\\1");//这是用两个叠词切割splitDemo("aqq9bbcdddde", "(.)\\1+");// 这是用多个叠词切割 } public static void splitDemo(String str, String reg) {// 对str进行按照reg规则进行切割,并把值赋给字符串数组arrString[] arr = str.split(reg);System.out.println(arr.length);// 进行输出for (String s : arr){ System.out.println(s);} }}
***************************************************邪恶的分割线**********************************************************************************************************************
第三个例子:替换
/** * 正则表达替换 替换:String replaceAll(); * * @author Administrator * */public class RegexDemo3{ public static void main(String[] args) {/** * 第一个例子:将wo13545667886caici3456中的数组替换成# 数字要求连续超过5个的, (比如论坛发帖,留电话不然留) * * 分析规则:\\d{5,} 首先判断是数字\\d 然后判断位数是否超过5个{5,}, 这个代表5个或者5个以上 */String str = "wo13545667886caici3456";replaceAll(str, "\\d{5,}", "#");/** * 第二个例子:将asdffffffdwwjedfffsseeecao中的 叠词替换成* * */String str1 = "asdfffiwwedffflssyeeeecao";// replaceAll(str1,"(.)\\1","*");//这个是代表只替换叠词为2的replaceAll(str1, "(.)\\1+", "*");/** * 第三个例子:将多个叠词比如eee替换成e 需要用到$符号 他代表使用前一个组的内容 1代表组号 代表第一个组 */String str2 = "asdfffiwwedffflsseeeecao";replaceAll(str2, "(.)\\1+", "$1"); } public static void replaceAll(String str, String reg, String newReg) {// 进行按照reg规则替换成newRegstr = str.replaceAll(reg, newReg);System.out.println(str); }}
***************************************************邪恶的分割线**********************************************************************************************************************
第四个例子:获取
/** * 正则表达第四个功能。 * 4,获取:将字符串中的符合规则的字串取出。 * * 操作步骤: * 1,将正则表达式封装成对象 使用Pettern * 2,让正则对象和要操作的字符串相关联 * 3,关联后,获取正则匹配引擎 * 4,通过引擎对符合规则的字串进行操作,比如取出 * * 需求将字符串 ming tian jiu yao fang jia la , da jia 中的 * 三个字符的单词取出 * * 小知识 :看表: \b表示单词边界 * * java.util.regex 这个包中 只有两个类: * Matcher : * boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。 String group() 返回由以前匹配操作所匹配的输入子序列。 * Pattern:static Pattern compile(String regex) 将给定的正则表达式编译到模式中。 * * */import java.util.regex.*;public class RegexDemo4{ public static void main(String[] args) {getDemo(); } public static void getDemo() {String str = " ming tian jiu yao fang jia la , da jia";// String reg = "[a-z]{3}";这种会将只要有三个单词的就获取 (不符合需求)// \b是表示单词边界,前后将单词加载中间String reg = "\\b[a-z]{3}\\b";// 将规则封装成对象Pattern p = Pattern.compile(reg);// 让正则对象和要作用的字符串相关联,获取匹配器对象Matcher m = p.matcher(str);// 其实String类中的matches方法,用的就是Pattern和Matcher对象// 来完成的..只不过String 的方法封装后,用起来较为简单,但是功能单一。// find()将规则作用于字符串上,并进行符合字串的查找while (m.find()){ // 获取匹配后的结果 System.out.println(m.group());} }}
***************************************************邪恶的分割线**********************************************************************************************************************
替换的练习:
将ip地址段的顺序进行排序
import java.util.Arrays;import java.util.*;/** * 需求1:将ip地址段的顺序进行排序 * * 思路:使用替换 * * 需求2:对邮箱进行验证 * * * @author Administrator * */public class RegexDemo5{ public static void main(String[] args) {ipSort();youjian(); } /** * 思路:是用正则表达替换 还按照字符串自然顺序,只哎哟让他们每一段就是3位即可。 1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3为 * 2,将每一段只保留三位,这样,所有的ip地址都是每一段3位, 3,然后将前面为0的消去 */ public static void ipSort() {String ip = "192.68.256 102.46.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(" ");// 进行排序/** * 方式一 :可以用 Arrays.sort进行排序 *//* * Arrays.sort(arr); for(int i=0 ;i<arr.length ;i++) { * System.out.println(arr[i]); } *//** * 方式二: 用TreeSet进行排序 * */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"));} } /** * 需求二: 对邮件地址进行校验 */ public static void youjian() {String mail = "abc123d@sina.com";// 创建规则/** * [a-z0-9A-Z_] 是数字英文或者下划线 + 这样的字符有多位 * * @ 有这个字符 * * [a-zA-z0-9] 域名必须是字母或者数字 * * (\\.[a-zA-Z]+) “.” 前面必须加\\ 可能是.com * * 后面还有一个加号 代表可能是.com.cn * * */String reg = "[a-z0-9A-Z_]+@[a-zA-z0-9]+(\\.[a-zA-Z]+)+";// 较为精确的// reg = "\\w+@\\w+(\\.\\w+)+";//较为笼统的规则boolean flag = false;flag = mail.matches(reg);if (flag){ System.out.println("邮件验证成功");} else{ System.out.println("验证失败");} }}
***************************************************邪恶的分割线**********************************************************************************************************************
练习一:
将下列字符串转成:我要学编程
/** * 需求: 将下列字符串转成:我要学编程 * * 思路方式: 1,如果只想知道该字符是否是对是错,使用匹配。 2,想要将已有的字符串编程另一个字符串,替换。 * 3,想要按照自定的方式将字符串编程多个字符串,七个,获取规则以外的字串 4,想要拿到符合需求的字符串字串,获取。获取符合规则的字串 * * @author Administrator * */public class RegexTest{ public static void main(String[] args) {test_1(); } public static void test_1() {String str = "我我...我我...我要..要要...要要...学学学....学...编编编...编程..程.程程...程...程";/** * 思路: 将已有字符串编程另一个字符串,使用替换功能. 1,现将.去掉。 2,再将多个重复的内容编程单个内容。 */// 将.去掉str = str.replaceAll("\\.", "");System.out.println(str);// 将叠词替换成单个str = str.replaceAll("(.)\\1+", "$1");System.out.println(str); }}
***************************************************邪恶的分割线**********************************************************************************************************************
练习二:
import java.net.*;import java.util.regex.*;import java.io.*;/** * 需求一:从文件中读取数据,并把邮箱读出 需求二:从网页中读取数据,并把邮箱读出(网页爬虫) * * 思路:因为要读出邮箱 ,所以要用获取 用获取 就要用 Pattern 和Matcher * * @author Administrator * */public class RegexText2{ public static void main(String[] args) throws Exception {getMail_2(); } // 完成需求一 public static void getMail_1() throws Exception {// 建立读取文件对象BufferedReader buf = new BufferedReader(new FileReader("D:/Student/java/mail.txt"));String line = null;String mailReg = "\\w+@\\w+(\\.\\w+)+";// 使用规则 并封装到Pattern中Pattern p = Pattern.compile(mailReg);while ((line = buf.readLine()) != null){ // 因为每一行都要匹配 所以匹配在循环里面 Matcher m = p.matcher(line); // 匹配器引擎 while (m.find()) {System.out.println(m.group()); }} } // 完成需求二 public static void getMail_2() throws Exception {URL url = new URL("http://tieba.baidu.com/p/2060050551");// 获取连接器URLConnection conn = url.openConnection();// 建立读取网页的流BufferedReader bufin = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;String mailReg = "\\w+@\\w+(\\.\\w+)+";// 使用规则 并封装到Pattern中Pattern p = Pattern.compile(mailReg);while ((line = bufin.readLine()) != null){ // 因为每一行都要匹配 所以匹配在循环里面 Matcher m = p.matcher(line); // 匹配器引擎 while (m.find()) {System.out.println(m.group()); }} }}
------- android培训、java培训、期待与您交流! ----------
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java 正则表达式详解_正则表达式
- java正则表达式!正则表达式踩坑!!!
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- java和正则表达式
- java正则表达式详解!
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- 学习笔记《锋利的jQuery》-jQuery选择器
- Failed to install .apk on device 'emulator-5554': timeout解决方法
- bug调试
- gcc的隐式调用
- 程序员的学习方法
- java-正则表达式
- android中使用ksoap2和服务器传递对象遇到的问题
- 右下角android sdk content loader 加载很慢的解决方法
- Java虚拟机 类初始化 阶段
- ffmpeg tutorial2 解析
- 正则表达式的使用
- jquery.controller-api
- 写一个decorator对一个decorator做help信息的替换
- UPnP code for Windows 8