正则表达式

来源:互联网 发布:唐山盘古网络 编辑:程序博客网 时间:2024/06/17 10:20
正则表达式:符合一定规则的表达式
    作用:用于专门操作字符串。
    特点:用一些特定的符号表示一些代码操作,简化书写。
    所以学习正则表达式,就是在学习一些特殊符号的使用。
    好处:简化对字符串的复杂操作
    弊端:符号定义越多,正则越长,复杂性越高。


具体操作功能:

1.匹配: String matches方法
    用规则匹配字符串,只要有一处不匹配就匹配结束,返回false
2.切割: String split
3.替换: String replaceAll()
4.获取:    将字符串中符合规则的子串取出
    操作步骤:
        1.将正则表达式封装成对象
        2.让正则对象和要操作的对象相关联
        3.关联后,获取正则匹配引擎

        4.通过引擎对符合规则的子串进行操作,比如取出。

/*对QQ号码进行校验。要求:5~15 0不能开头,只能是数字。*/public static void checkQQ_1(){String qq = "1234fd22";int len = qq.length();if(len >= 5 && len<=15){if(!qq.startsWith("0")){char[] arr = qq.toCharArray();boolean flag = true;for(int x=0; x<len; x++){if(!(arr[x]>='0' && arr[x]<='9')){flag = false;break;}}if(flag)System.out.println("qq="+qq);elseSystem.out.println("出现非法字符");}elseSystem.out.println("不可以0开头");}elseSystem.out.println("长度错误");}public static void checkQQ_2(){String qq = "1234fd22";int len = qq.length();if(len >= 5 && len<=15){if(!qq.startsWith("0")){/*这种方式使用了String类中的方法进行组合,完成了选修。但是代码过于复杂*/try{long l = Long.parseLong(qq);System.out.println("qq="+qq);}catch (NumberFormatException e){System.out.println("出现非法字符");}}elseSystem.out.println("不可以0开头");}elseSystem.out.println("长度错误");}//boolean matches(String regex)告诉字符串是否匹配给定的正则表达式。public static void checkQQ_3(){String qq = "01422";//开头字符为'1'-'9',后面的字符为'0'-'9',可以是4到14次String regex = "[1-9][0-9]{4,14}";boolean flag = qq.matches(regex);if(flag)System.out.println(qq+"...yes");elseSystem.out.println(qq+"...no");}}

public static void demo(){String str = "a";//false/*String str1 = "b";trueString str2 = "ba";false String regex = "[bcd][a-z]"校验长度为2的字符串String regex = "[a-zA-Z]\\d"手机号段只有13xxx 15xxx 18xxx长度为11:String regex = "1[358]\\d{9}";*///str中的第一个字符必须是b或c或d。而且只能校验长度为1的字符串。String regex = "[bcd]";boolean b = str.matches(regex);System.out.println(b);}

切割

class Split{public static void main(String[] args) {/*按叠词切割:第一位可以是任意字符,第二位是第一位的重用封装成(.)组,组中的结果可被再次使用(.)\1,写成字符串为:"(.)\\1"为了让规则的结果被重用,可以将规则封装成一个组,组的出现都有编号从1开始,想要使用已有的组,可以通过\\n(n是指组的编号)的形式来获取*/               splitDemo("zhangsan,lisi,wangwu", ",");               //按照多个空格进行切割               splitDemo("zhangsan   lisi   wangwu", " +");               //.是特殊字符,要经过转换再使用               splitDemo("zhangsan.lisi.wangwu", "\\.");               splitDemo("c:\\abc\\a.txt", "\\\\");                splitDemo("erkktyqquizzo", "(.)\\1");//叠一次splitDemo("erkktyqqquizzzzzo", "(.)\\1+");//叠一次或多次}public static void splitDemo(String str, String regex){String[] arr = str.split(regex);//切割成的段数System.out.println(arr.length);for(String s : arr)System.out.println(s);}}

替换

class Replace{public static void main(String[] args) {//只要数字连续出现超过5个,就替换成#号replaceAllDemo("jkl978324975dje99109sgd", "\\d{5,}", "#");//将叠词替换成#号replaceAllDemo("erkktyqqquizzzzzo", "(.)\\1+", "#");//将重叠字符替换成单个字符,$1表示前面规则中的第一个组。replaceAllDemo("erkktyqqquizzzzzo", "(.)\\1+", "$1");}public static void replaceAllDemo(String str, String regex, String newStr){str = str.replaceAll(regex, newStr);System.out.println(str);}}
演示

public static void getDemo(){String str = "kuai le zhi shang, ai za di jiu za di.";//找3个字母组成的单词,使用单词边界\bString regex = "\\b[a-z]{3}\\b";//将规则封装成对象。Pattern p = Pattern.compile(regex);//让正则对象和要作用的字符串相关联,获取匹配器对象Matcher m = p.matcher(str);//其实String类中的matches方法就是通过Pattern和Matcher来完成的//但被String封装后,功能简单,用法单一// m.find():将规则作用到字符串上,并进行符合规则的子串查找。while(m.find()){//m.group():用于获取匹配后的结果System.out.println(m.group());//边界,找到是子串在原串中的索引位置,左闭右开System.out.println(m.start()+"....."+m.end());}}

实例一:

/*需求:将下列字符串转成:我要学编程。到底用四种功能中的哪一个呢?或者哪几个呢?思路:1.如果只想知道该字符串是对还是错,用匹配2.想将已有字符串变成另一个字符串,用替换3.想按照自定义凡是键字符串变成多个字符串,用切割4.要拿到符合需求的字符串子串,用获取*/public static void test_1(){String str = "我我...我要...要....要要....学学...唱唱唱唱...唱歌..歌.歌歌歌";/*将已有字符串变成另一个字符串,使用替换功能。1.可以先将.去掉2.将多个重复的内容变成单个内容*/str = str.replaceAll("\\.+", "");System.out.println(str);replaceAllDemo(str, "(.)\\1+", "$1");}

实例二:

/*将IP地址进行地址段顺序排序。还安装字符串自然顺序排序,只要让他们每一段都是3位即可。1.按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3为2.将每一段只保留3为,这样,所有的ip地址都满足每一段3为。*/public static void ipSort(){String ip = "192.168.1.254 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);System.out.println(s.replaceAll("0*(\\d+)", "$1"));}}

实例三:

class CheckMa{public static void main(String[] args) {checkMail("abc12@sina.com");checkMail("abc12@sina.com.cn");checkMail("abc12@sina.com.cn.cn");}//需求:对邮件地址进行校验public static void checkMail(String mail){//较为精确的匹配String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//相对不太精确的匹配reg = "\\w+@+\\w+(\\.\\w+)+";//if(mail.indexOf("@") != -1)搞笑,是可以,但是....System.out.println(mail.matches(reg));}}


实例四:

/*网页爬虫(蜘蛛)。获取指定文档中的邮件地址。使用获取公共,Pattern Matcher*/public static void getMails_1()throws Exception{//先要新建mail.txt文件BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));String line = null;String mailReg = "\\w+@\\w+(\\.\\w+)+";Pattern p = Pattern.compile(mailReg);while((line=bufr.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}

实例五:

public static void getMails_2()throws Exception{URL url = new URL("http://192.168.1.254:8080/myweb/hz.html");URLConnection conn = url.openConnection();BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;String mailReg = "\\w+@\\w+(\\.\\w+)+";Pattern p = Pattern.compile(mailReg);while((line=bufIn.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}

<html><body><h1>这是我的主页</h1><font size=5 color=red>欢迎光临</font><div>abd@sina.com.cn</br>32899@sina.com</br>窗前明月光</br>疑是地上霜</br>举头望明月</br>低头思故乡</br></div></body></html>


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 商标被别人申请无效宣告怎么办 淘宝上传宝贝没有品牌怎么办 萌虎白卡借款2000逾期了怎么办 最里面的牙齿烂了怎么办 金龙沉底不游怎么办 龙鱼尾巴烂了怎么办 微博忘了登录名和密码怎么办 新浪微博密码忘了怎么办 vivo手机用户密码忘了怎么办 微博登录名忘记了怎么办 微信忘记密码钱怎么办 微信密码申诉失败怎么办 微博密码被盗了怎么办 对公密码器丢了怎么办 手机qq忘记旧密码怎么办 qq旧密码忘记了怎么办 微博账户密码忘记了怎么办 三星盖乐世s3忘记密码了怎么办 微博登录密码忘记了怎么办 助学贷款密码忘了怎么办 助学贷款的密码忘了怎么办 助学贷款登录密码忘了怎么办 抖音换了手机登不了怎么办 微信忘记密码申诉失败怎么办 银行卡短信通知没了怎么办 斗鱼手机号被绑定了怎么办 网易邮箱不记得账号怎么办 qq号被盗申诉不回来怎么办 号被盗了申诉不回来怎么办 富士康离职后工资卡号没填怎么办? 填高考志愿时没填电话号码怎么办 铁路12306密码忘了怎么办 微销通提示网络请求失败怎么办 苹果手机出现不停播报情况怎么办 手做俯卧撑抬不起来怎么办 如果qq号被冻结了怎么办 买的qq号被冻结怎么办 联想平板怎么下载东西怎么办 所有浏览器都安装不了怎么办 忘记微博登录邮箱怎么办 丰巢验证码丢了怎么办