案例1:判断字符串是否是abc

package Regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 1.正则对应的类是Pattern(翻译:模式)而不是Rxgex,我们用到的方法都在Pattern类里面
* 2.案例1:判断字符串是否是abc
*/
public class PatternDemo01 {
public static void main(String[] args) { String str = "abc"; // 根据以前的方法进行判断
// System.out.println(str.equals("abc")); /**
* 用正则表达式来判断
* 1.compile(String regex) 将给定的正则表达式编译到模式中。
* 2.matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。
* 3.matches() 尝试将整个区域与模式匹配。
*/
// 首先要编译正则规则形式
Pattern p = Pattern.compile("abc");
// 将正则进行匹配
Matcher m = p.matcher(str);
// 进行判断
boolean b = m.matches();
System.out.println(b); }
}

案例2:判断一个字符串

package Regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 案例2:判断一个字符串
* 由3个字母组成
* 第一个字母是 a/b/c
* 第二个字母是 d/e/f/g
* 第三个字母是 x/y/z
*/
public class PatternDemo02 {
public static void main(String[] args) {
String str = "agx"; // 指定判断规则(中括号内字符顺序随便)
Pattern p = Pattern.compile("[abc][edgf][xzy]");
// 进行规则匹配
Matcher m = p.matcher(str);
// 进行判断
boolean b = m.matches();
System.out.println(b);
}
}

案例3:判断一个字符串

package Regex;
/**
* 案例3:判断一个字符串
* 由3个字母组成
* 第一个字母是 a/b/c
* 第二个字母是 d/e/f/g
* 第三个字母是 x/y/z
*/
public class PatternDemo03 {
public static void main(String[] args) {
String str = "agx"; // 将原来的3个步骤封装到一步进行判断
System.out.println(str.matches("[abc][defg][zyx]"));
}
}

案例4:字符类

[abc]     a、b 或 c(简单类)
[^abc]     任何字符,除了 a、b 或 c(否定)
[a-zA-Z]     a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]     a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]     d、e 或 f(交集)
[a-z&&[^bc]]     a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]     a 到 z,而非 m 到 p:[a-lq-z](减去)

package Regex;
/**
* [abc] a、b 或 c(简单类)
* [^abc] 任何字符,除了 a、b 或 c(否定)
* [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
*/
public class PatternDemo04 {
public static void main(String[] args) { // 判断由一个字母组成的字符串
String str1 = "D";
System.out.println(str1.matches("[a-zA-Z]")); // 判断由一个数字组成的字符串
String num = "2";
System.out.println(num.matches("[0-9]")); // 判断由一个字符组成的字符串,但不是 a/b/c
String str2 = "/";
System.out.println(str2.matches("[^a-c]"));
}
}

案例5:预定义字符类

package Regex;
/**
* 案例5:预定义字符类
* . 任何一个字符(与行结束符可能匹配也可能不匹配)
*/
public class PatternDemo05 {
public static void main(String[] args) { // 判断一个由a开头的由两个字符组成的字符串
String str1 = "af";
System.out.println(str1.matches("a.")); // 判断是否是一个 .
// Java 用\\进行转义
String str2 = ".";
System.out.println(str2.matches("\\.")); // 匹配一个 \
String str3 = "\\";
System.out.println(str3.matches("\\\\")); }
}

案例6:判断小数

package Regex;
/**
* 案例6:Greedy 数量词
* X+ 代表 X至少出现一次或多次 >=1
*
* Reluctant 数量词
* X* 代表X出现零次或多次 >=0
*
* X? 表示X至多出现一次
*/
public class PatternDemo06 {
public static void main(String[] args) { // 判断由a开头,至少有三个字符组成的字符串
String str1 = "asdfuj312s";
System.out.println(str1.matches("a.+")); // 判断由小写字母开头,数字结尾的字符串
String str2 = "a3";
System.out.println(str2.matches("[a-z].*[0-9]")); // 判断由a开头至多有2个字符组成的字符串
String str3 = "a";
System.out.println(str3.matches("a.?")); // 判断小数
String str4 = "0.4";
System.out.println(str4.matches("[0-9]+\\.\\d+"));
System.out.println(str4.matches("0\\.\\d+") || str4.matches("[1-9]\\d*\\.\\d+"));
}
}

案例7:密码校验:8-20位,小写字母/大写字母/数字中的至少两种

package Regex;
/**
* 案例7:
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超过 m 次
*/
public class PatternDemo07 {
public static void main(String[] args) { // 判断由5个小写字母组成的字符串
String str1 = "gjhad";
System.out.println(str1.matches("[a-z]{5}")); // 判断由至少5个小写字母组成的字符串
String str2 = "sdfguhvujhsdfkgvjhsdf";
System.out.println(str2.matches("[a-z]{5,}")); // 判断由8-12个小写字母组成的字符串
String str3 = "weqrtyuio";
System.out.println(str3.matches("[a-z]{8,12}")); // 练习:密码校验:8-20位,小写字母/大写字母/数字中的至少两种
String str4 = "qwe123SAD";
check(str4);
} public static boolean check(String str) {
// 判断输入的密码是否出现规定以外的字符
if(!str.matches("[a-zA-Z0-9]{8,20}"))
return false; // 记录出现几种字符
int count = 0; // 如果出现小写字母
if(str.matches(".*[a-z].*"))
count++;
// 如果出现大写字母
if(str.matches(".*[A-Z].*"))
count++;
// 如果出现数字
if(str.matches(".*[0-9].*")) // str.matches(".*\\d.*")
count++;
// 如果count < 2
if(count < 2) {
System.out.println("密码错误!");
return false;
}else
return true;
}
}

案例8:()捕获组

package Regex;
/**
* 案例8:
* 1.()捕获组
* 2.正则表达式会对其中的捕获组进行自动编号
* 3.从1开始编号
* 4.\\n 表示引用前边编号为n的捕获组
*
*/
public class PatternDemo08 {
public static void main(String[] args) {
/**
* 捕获组的编号是从捕获组的左半边括号出现的位置开始计算的
* (A((BC)(D))E)(F)
* 1号:A((BC)(D))E
* 2号:(BC)(D)
* 3号:BC
* 4号:D
* 5号:F
*/
String str1 = "abfdabasdf";
System.out.println(str1.matches(".*(ab).*\\1.*")); // 匹配至少由两个字符组成的字符串
System.out.println(str1.matches("(.){2,}"));
}
}

案例9:运用捕获组判断叠字

package Regex;
/**
* 案例9:
* 运用捕获组判断叠字
*/
public class PatternDemo09 {
public static void main(String[] args) { // 匹配AAA形式的叠字字符串
String str1 = "aaa";
System.out.println(str1.matches("(.)\\1+")); // 匹配AABB形式的叠字字符串
String str2 = "AABB";
System.out.println(str2.matches("(.)\\1(.)\\2")); // 匹配ABAB形式的叠字字符串
String str3 = "ABAB";
System.out.println(str3.matches("(..)\\1"));
}
}

案例10:邮箱格式校验

package Regex;
/**
* 案例10:邮箱格式校验
*
*/
public class PatternDemo10 {
public static void main(String[] args) {
String str1 = "42513@qq.com";
String str2 = "cjjsdfasf@sina.com.cn";
String str3 = "24eqwe";
check(str1);
check(str2);
check(str3); } public static void check(String str) { // 以.cn结尾的邮箱
if(str.matches("[a-zA-Z0-9]{6,36}@[a-zA-Z0-9]{3,10}(\\.com)?(\\.cn)")
||str.matches("[a-zA-Z0-9]{3,10}@[a-zA-Z0-9]{1,36}(\\.com)")) { System.out.println("ok");
}else
System.out.println("no");
}
}

案例11:利用正则表达式替换字符串内指定字符

package Regex;
/**
* 利用正则表达式替换字符串内指定字符
*
*/
public class PatternDemo11 {
public static void main(String[] args) { String str = "261refdae612c,./d/"; // 将字符串内所有数字替换为-
System.out.println(str.replaceAll("\\d", "-")); // 将字符串内所有非数字去掉
System.out.println(str.replaceAll("\\D", "")); }
}

案例12:输入一个字符串,统计字符串中每一个字符出现的次数

package Regex;
/**
* 输入一个字符串,统计字符串中每一个字符出现的次数
*
*/
public class PatternDemo12 {
public static void main(String[] args) {
String str = "sdafv187623rtajhsd";
fin(str);
} public static void fin(String str) { // 获取第一个字符
char c = str.charAt(0);
// 将第一个字符都替换为空
String str1 = str.replaceAll("" + c, "");
// 计算两个字符串的长度
int len = str.length() - str1.length();
System.out.println(str.charAt(0) + ":" + len);
// 如果替换后的字符串长度大于0.说明还没有统计完,再次调用统计方法
if(str1.length() > 0)
fin(str1);
}
}

案例13:交换字符串中指定位置的字符

package Regex;
/**
* 交换字符串中指定位置的字符
*
*/
public class PatternDemo13 {
public static void main(String[] args) { String str = "I Like Beijing.";
System.out.println(str.replaceAll("(I )(Like )(Beijing.)", "$3$2$1")); }
}

案例14:将叠字替换为单字

package Regex;
/**
* 将叠字替换为单字
*/
public class PatternDemo14 {
public static void main(String[] args) { String str = "AAAAABBBBBDDDDDGGGGG";
System.out.println(str.replaceAll("(.)\\1+", "$1")); }
}

案例15:计算字符串的平均长度

package Regex;

/**
* 计算字符串的平均长度
*
*/
public class PatternDemo15 {
public static void main(String[] args) { String str = "aaabbbdjhjjjjkkkkk(((jjjooo";
fin(str); } public static void fin(String str) {
// 字符串长度
double len = str.length();
// 将叠字换成单字
String str1 = str.replaceAll("(.)\\1+", "a");
// 统计单字组成的长度
double len1 = str1.length(); double n = len / len1;
System.out.println(n);
}
}

案例16:以数字作为切割符将字符切开

package Regex;

import java.util.Arrays;

/**
* 以数字作为切割符将字符切开
* 作为切割符的符号会被切掉
* 在字符串最尾部的切割符会整个切掉
*/
public class PatternDemo16 {
public static void main(String[] args) {
String str = "2iasug8jhfch9sjba90";
/**
* 1.split(String regex)
* 根据给定正则表达式的匹配拆分此字符串。
* 2.toString(Object[] a)
* 返回指定数组内容的字符串表示形式。
*/
// str1是字符串数组
String[] str1 = str.split("\\d");
// 将字符串数组抓换成字符串
System.out.println(Arrays.toString(str1));
}
}

Java 正则表达式详细实例解析的更多相关文章

  1. java正则表达式详细总结

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  2. 使用Java正则表达式的分组解析身份证的年月日

    根据Java的Pattern和Matcher类通过分组解析出身份证的年月日: public class GetDateInIdCard { public static void main(String ...

  3. Java 正则表达式详细使用

    Java 正则表达式 java.util.regex.Pattern java.util.regex.Matcher 1.Matchmatch 是从字符串最头部开始匹配,一直到结束,需要匹配整个串 S ...

  4. Java正则表达式详细解析

    元字符 正则表达式使用一些特定的元字符来检索.匹配和替换符合规则的字符串 元字符:普通字符.标准字符.限定字符(量词).定位字符(边界字符) 正则表达式引擎 正则表达式是一个用正则符号写出来的公式 程 ...

  5. java正则表达式常用实例——借鉴思路

    转载自:http://mp.weixin.qq.com/s?__biz=MjM5OTM4NDMyMg==&mid=2650044497&idx=1&sn=dc80fa35f7e ...

  6. 阿里云服务器云数据库免费体验(Java Web详细实例)

    一.效果展示 博主部署了两个war包到阿里云服务器上,一个是没有连接数据库的,另外一个是连接了数据库的. (由于阿里云服务器免费使用15天,下面链接约2016年3月9日后无效) (1)无数据库版访问地 ...

  7. Java反射机制实例解析

    1.获取想操作的访问类的java.lang.Class类的对象     2.调用Class对象的方法返回访问类的方法和属性信息     3.使用反射API来操作      每个类被加载后,系统会为该类 ...

  8. java枚举通俗实例解析

    1         枚举 1.1            枚举的作用 我们经常要定义一些常量值,例如日期(MONDAY,TUESDAY……)或者错误码等.可以将常量组织起来,统一进行管理.常量比较只是值 ...

  9. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

随机推荐

  1. 【eclipse】运行maven项目clean tomcat7:run报错

    问题: Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean 解决: 关闭进程javaw.exe,然 ...

  2. 简单实现Ubuntu16.04 + caffe2 + CUDA9.0 + cuDNN8.0

    在Ubuntu16.04 CUDA9.0 cuDNN8.0的环境下安装caffe2 本博客比较简单,cuda9.0 cudnn8.0部分请看上一篇博客,其中详细讲了: 如何安装驱动 安装cuda 安装 ...

  3. CCNA学习指南 -开放最短路径优先OSPF(单区域)

    在上个世纪九十年代撰写的<TCP/IP协议详解 卷一:协议>的动态选路中,内容大部分还是介绍 RIP路由选择信息协议,在互联网络如此发达的今天,RIP因为它的局限性逐步被OSPF取代. 在 ...

  4. HDU 1556 Color the ball(线段树:区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...

  5. XML_CPP_资料_libXml2_01

    ZC: 看了一些 C/C++的XML文章,也看了一些 Qt的 QXmlQuery/QXmlSimpleReader/QXmlStreamReader/QXmlStreamWriter 的文章.总体感觉 ...

  6. 解决 android.support.v7.widget.GridLayout 使用 xmlns:app 出现 error 的问题

    GridLayout 是在 Android API Level 14 加进来的 它可用来取代 TableLayout 也提供了自由度较大且实用的排版功能 为了兼容 4.0 以下的较低版本 Androi ...

  7. 递归--练习11--noi9273 PKU2506Tiling

    递归--练习11--noi9273 PKU2506Tiling 一.心得 25 a[i]%=10;(高精度时) 26 这里错了,花了好久改好 27 28 29 int* f(int n){ 30 if ...

  8. 一个故意消耗内存的java程序MemoryEater

    公司提供的测试服务器是vmware的,号称给我6G, 物理内存事实上是按需分配的. 等到真正拿到6G物理内存,黄花菜都凉了. 看到下面的文章,觉得故意用java程序侵占6G内存, 然后把侵占到内存的释 ...

  9. 将keras模型在django中应用时出现的小问题——ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 8), dtype=float32) is not an element of this graph.

    本文原出处(感谢作者提供):https://zhuanlan.zhihu.com/p/27101000 将keras模型在django中应用时出现的小问题 王岳王院长 10 个月前 keras 一个做 ...

  10. ADSL拨号上网或者光纤上网设置概要(原创)

    不管是在梧州设置光纤还是在太平设置ADSL拨号上网每次设置上网一体机的时候都是遇到各种麻烦...这次又是弄了N久,每次问题各不一样.总结一下操作过程,方便以后又遇问题回头查询自个微博.一.设置电话线的 ...