importjava.util.Scanner;public classRegexDemo02 {public static voidmain(String[] args) {

Scanner sc= newScanner(System.in);

System.out.println("请输入您的QQ号码:");

String str=sc.nextLine();boolean f =queckQQ(str);

System.out.println("result:"+f);

}public static booleanqueckQQ(String qq) {

String regex= "[1-9][0-9]{4,14}";boolean flag =qq.matches(regex);returnflag;//return qq.matches("[1-9][0-9]{4,14}");

}

}

3、正则表达式的组成规则

规则字符在java.util.regex Pattern类中    常见组成规则

·字符

x 表示字符x。举例:‘a’ 表示字符a

\\ 表示反斜线字符

\n 表示新行(换行)符(‘\u000A’)

\r 表示回车符('\u 000D')

· 字符类

[abc] 表示a 、b、c(简单类)

[^abc] 表示任何字符,除了a、b或c(否定)

[a-zA-Z] 表示a到z 或A到Z,两头的字母包括在内(范围)

[0-9] 表示0到9的字符都包括

·预定义字符类

. 表示任何字符

\d 表示数字:[0-9]

\D 表示非数字:[^0-9]

\w 表示单词字符:[a-zA-Z_0-9],在正则表达式里面组成单词的东西必须有这些东西组成

\W 表示非单词字符

·边界匹配器

^ 表示行的开头

$ 表示行的结尾

\b 表示单词边界,就是不是单词字符的地方。

举例:hello world?haha;xixi

·数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n 次

X{n,}

X,至少 n 次

X{n,m}

X,至少 n 次,但是不超过 m 次

3、正则表达式的应用

· 判断功能  public boolean matches(String regex)

· 分割功能  public String[] split(String regex)

· 替换功能  public String replaceAll(String regex,String replacement)

· 获取功能  Pattern和Matcher类的使用

1)匹配方法  matches

public static boolean matches(String regex, CharSequence input)

编译给定正则表达式并尝试将给定输入与其匹配。

调用此便捷方法的形式

Pattern.matches(regex, input);

与表达式

Pattern.compile(regex).matcher(input).matches()

的行为完全相同。

如果要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高。参数:regex - 要编译的表达式input - 要匹配的字符序列抛出:

举例1:校验手机号码。要求:11位,18或13开头。

*                     13436975980

* 13688886868

* 13866668888

* 13456789012

* 13123456789

* 18912345678

* 18886867878

* 18638833883

importjava.util.Scanner;public classRegexDemo03 {public static voidmain(String[] args) {

Scanner sc= newScanner(System.in);

System.out.println("请输入您的手机号码:");

String phone=sc.nextLine();boolean f =queckTelPhone(phone);

System.out.println("result:"+f);

}public static booleanqueckTelPhone(String phone) {

String regex= "1[38]\\d{9}";returnphone.matches(regex);

}

}

举例2:校验邮箱。

importjava.util.Scanner;/*** 定义邮箱的规则

* 1517806580@qq.com

* liuyi@163.com

* linqingxia@126.com

* fengqingyang@sina.com.cn

* fqy@itcast.cn*/

public classRegexDemo04 {public static voidmain(String[] args) {

Scanner sc= newScanner(System.in);

System.out.println("请输入您的邮箱:");

String email=sc.nextLine();boolean f =queckEmail(email);

System.out.println("result:"+f);

}public static booleanqueckEmail(String email) {

String regex= "\\w+@\\w{2,6}(\\.\\w{2,3})+";returnemail.matches(regex);

}

}

2)分割功能 split

public String[] split(CharSequence input, int limit)

围绕此模式的匹配拆分给定输入序列。

此方法返回的数组包含输入序列的子字符串,由匹配此模式的另一子序列或输入序列的结尾终止。数组中子字符串的顺序与其在输入中出现的顺序相同。如果此模式与输入的任何子序列都不匹配,那么得到的数组仅包含一个元素,即字符串形式的输入序列。

limit 参数控制应用模式的次数,从而影响结果数组的长度。如果限制 n 大于零,那么模式至多应用 n> - 1 次,数组的长度不大于 n,并且数组的最后条目将包含除最后的匹配定界符之外的所有输入。如果 n 非正,那么将应用模式的次数不受限制,并且数组可以为任意长度。如果 n 为零,那么应用模式的次数不受限制,数组可以为任意长度,并且将丢弃尾部空字符串。

举例3:

百合网,世纪佳缘,珍爱网,QQ

搜索好友

性别:女

范围:"18-24",age>=18 && age<=24

importjava.util.Scanner;public classRegexDemo05 {public static voidmain(String[] args) {//定义一个年龄搜索范围

String ages = "18-24";//定义规则

String regex = "-";//调用方法

String[] strArray =ages.split(regex);//如何得到int类型的呢?

int startAge = Integer.parseInt(strArray[0]);int endAge = Integer.parseInt(strArray[1]);//键盘录入年龄

Scanner sc = newScanner(System.in);

System.out.println("请输入你的年龄:");int age =sc.nextInt();if(age>=startAge && age<=endAge) {

System.out.println("你就是我想找的");

}else{

System.out.println("不符合我的要求,gun");

}

}

}

举例4:直接分割

public classRegexDemo06 {public static voidmain(String[] args) {//定义一个字符串

String s1 = "aa,bb,cc";//直接分割

String[] str1Array = s1.split(",");for (int x = 0; x < str1Array.length; x++) {

System.out.println(str1Array[x]);

}

System.out.println("---------------------");

String s2= "aa.bb.cc";

String[] str2Array= s2.split("\\.");for (int x = 0; x < str2Array.length; x++) {

System.out.println(str2Array[x]);

}

System.out.println("---------------------");

String s3= "aa bb cc";

String[] str3Array= s3.split(" +");for (int x = 0; x < str3Array.length; x++) {

System.out.println(str3Array[x]);

}

System.out.println("---------------------");//硬盘上的路径,我们应该用\\替代\

String s4 = "E:\\JavaSE\\day14\\avi";

String[] str4Array= s4.split("\\\\");for (int x = 0; x < str4Array.length; x++) {

System.out.println(str4Array[x]);

}

System.out.println("---------------------");

}

}

举例5:

/*

* 我有如下一个字符串:"91 27 46 38 50"

* 请写代码实现最终输出结果是:"27 38 46 50 91"

* 分析:

* A:定义一个字符串

* B:把字符串进行分割,得到一个字符串数组

* C:把字符串数组变换成int数组

* D:对int数组排序

* E:把排序后的int数组在组装成一个字符串

* F:输出字符串

*/

importjava.util.Arrays;public classRegexDemo07 {public static voidmain(String[] args) {

String s= "91 27 46 38 50";

String[] strArray= s.split(" ");int[] arr = new int[strArray.length];for (int x = 0; x < strArray.length; x++){

arr[x]=Integer.parseInt(strArray[x]);

}

Arrays.sort(arr);

StringBuilder sb= newStringBuilder();for(int x = 0; x < arr.length; x++){

sb.append(arr[x]).append(" ");

}

String result=sb.toString().trim();

System.out.println("result:"+result);

}

}

3)替换功能

String类的public String replaceAll(String regex,String replacement)

用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

public classRegexDemo08 {public static voidmain(String[] args) {

String s= "helloqq12345worldkh622112345678java";

String regex= "\\d";

String ss= "*";

String result=s.replaceAll(regex,ss);

System.out.println("result:"+result);

}

}

4)获取功能

Pattern和Matcher类的使用

模式和匹配器的基本使用顺序

importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classRegexDemo09 {public static voidmain(String[] args) {//模式和匹配器的典型调用顺序//把正则表达式编译成模式对象

Pattern p = Pattern.compile("a*b");//通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串

Matcher m = p.matcher("aaaaab");//调用匹配器对象的功能

boolean b =m.matches();

System.out.println(b);//以上是判断功能,太麻烦了,我们直接用字符串的方法做

String s = "aaaaab";

String regex= "a*b";boolean bb =s.matches(regex);

System.out.println(bb);

}

}

举例:

获取下面这个字符串中由三个字符组成的单词

da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?

importjava.util.regex.Matcher;importjava.util.regex.Pattern;/*** Created by gao on 15-12-5.*/

public classRegexDemo10 {public static voidmain(String[] args) {//定义字符串

String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";//规则 \\b表示单词边界,边界不允许出现单词字符

String regex = "\\b\\w{3}\\b";//把规则编译成模式对象

Pattern p =Pattern.compile(regex);//通过模式对象得到匹配器对象

Matcher m =p.matcher(s);//调用匹配器对象的功能//通过find方法就是查找有没有满足条件的子串//public boolean find()

while(m.find()) {

System.out.println(m.group());

}//注意:一定要先find(),然后才能group()//IllegalStateException: No match found//String ss = m.group();//System.out.println(ss);

}

}

世纪佳缘 java_Java API —— Pattern类相关推荐

  1. 世纪佳缘,玫瑰和面包开始PK

    你在桥上看风景 看风景人在楼上看你 明月装饰了你的窗子 你装饰了别人的梦     ----卞之琳<断章>       喜欢卞之琳这首诗的意境和韵味,如同一幅水墨画,淡雅,清新,悠远.    ...

  2. 世纪佳缘财务及运营数据分析

    世纪佳缘成立于2003年10月8日,是中国在线婚恋交友平台,通过互联网.无线平台和线下活动为单身人士提供严肃婚恋交友服务.2011年5月11日,世纪佳缘登陆美国纳斯达克进行首次公开募股,成为首家上市的 ...

  3. 【转】推荐系统入门实践:世纪佳缘会员推荐(完整版)

    推荐系统入门实践:世纪佳缘会员推荐(完整版) 版本 作者 联系 日期 1.0 周巍然 weiran.chow@gmail.com 20120723 2.0 严 程 supersteven198701@ ...

  4. 世纪佳缘推智能设备 是衰退迹象 还是第二春征兆?

    已被业界忽视多时的互联网婚恋市场掀起新波澜.近期,世纪佳缘宣布将在5月内推出智能设备,这一消息因最先由极客男(搜狗CEO)王小川发出,而迅速引起媒体围观.按常理,婚恋网站与智能设备之间是八竿子打不着的 ...

  5. 世纪佳缘再出事故,区块链能成为搅动婚恋行业的新鲶鱼吗?

    婚姻是人生大事,也是家庭理念深厚的国人长辈们对时下青年群体最为关注的一环.但在如今高线城市快节奏生活方式,重社交轻婚恋的理念之下,单身人群增多,平均婚龄也大幅度后移.根据国家统计局相关数据显示,我国单 ...

  6. 大数据告诉你,世纪佳缘都是谁在相亲(python爬虫分析,附全部代码)

    公众号: 数据小斑马,关注即可获得价值1000元的数据分析学习资料 数据分析学习目录: 一.Excel系列--四大常用函数及十大高级图表 二.SQL系列--性能优化/多表关联/窗口分析函数等 三.统计 ...

  7. python多线程爬取世纪佳缘女生资料并简单数据分析

    一. 目标 ​ 作为一只万年单身狗,一直很好奇女生找对象的时候都在想啥呢,这事也不好意思直接问身边的女生,不然别人还以为你要跟她表白啥的,况且工科出身的自己本来接触的女生就少,即使是挨个问遍,样本量也 ...

  8. 315前瞻|百合佳缘旗下百合婚恋、世纪佳缘等婚恋平台乱象频生

    婚恋交友平台,乱象频生. 近日,工信部开展APP侵害用户权益整治"回头看",通报14款存在问题APP,360手机卫士.恋爱记.安兔兔评测.百合婚恋.幸福里和亚朵等在列.工信部要求, ...

  9. Python爬虫实战+数据分析+数据可视化(世纪佳缘)

    中国男女比例的失衡,再加上广大男同胞们都想着努力为自己的事业而奋斗很少能够接触到女人,使得乎广大男同胞大都选择相亲网站来找到属于自己的另一半,,作为90的我深知广大男同胞的心情,于是乎博主通过对世纪佳 ...

最新文章

  1. Django Request对象3.3
  2. 新型冠状病毒心理防护手册(大众版)
  3. 天刀各大区服务器位置,数据帝玩家统计 天刀全区活跃地图展示
  4. excel 复制数据 sql server 粘贴_几百个Excel表格的内容要复制粘贴,如何一键自动化搞定?| 州的先生...
  5. 【小松教你手游开发】【unity系统模块开发】Unity5.5.2UI打包AssetBundle
  6. 功能Java示例 第3部分–不要使用异常来控制流程
  7. linux中用参数代替键盘输入,Linux终端中使用上一命令减少键盘输入
  8. flutter NestedScrollView 下拉刷新的解决方案一
  9. 32 位的有符号整数_「js基础」JavaScript逻辑和位运算符归纳
  10. 黑马程序员php考试题,PHP基础案例教程
  11. 【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph
  12. WebView的爬坑之路
  13. 大数据踩坑之旅: 从数据可视化到商业智能
  14. android 实体对象转 json,list转 json ,map转json
  15. 计算机主板电流图形,终于找到电脑主板供电电路介绍
  16. 【python小技巧】 批量将.png格式图片转换为.jpg格式图片
  17. 一道CF送命题引发的博文
  18. python将图片转换成动漫,python实现图片转换成素描和漫画格式
  19. 拆分基础Slam(1)--静态相机前端
  20. 用户同步管理及集群初始配置-集群搭建步骤7

热门文章

  1. 学软件测试看什么书好?
  2. 7-12 种树(详解)
  3. 为你推荐一份深度学习书单,来学习吧~
  4. 如何确定数组中含有某个元素?
  5. 【C语言】a数组中有8个元素,第6个元素后第3个元素移到开头
  6. 无U盘安装Windows系统
  7. fail2ban帮助postfix过滤恶意IP
  8. orientdb教程(1)-orientdb安装
  9. Android系统资源
  10. Qt之ThreadPool